Привязать параметр маршрута к модели - PullRequest
2 голосов
/ 27 октября 2011

Допустим, у меня есть маршрут, подобный следующему

/{controller}/{action}/{id}

Можно ли привязать идентификатор к свойству в моей модели

public ActionResult Update(Model model)
{
    model.Details.Id <-- Should contain the value from the route...
}

Где мой класс модели следующий?

public class Model
{  
    public Details Details {get;set;}
}

public class Details
{
    public int Id {get;set;}
}

1 Ответ

2 голосов
/ 27 октября 2011

Вы захотите создать собственное связующее для модели.

public class SomeModelBinder : IModelBinder {

    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
        ValueProviderResult value = bindingContext.ValueProvider.GetValue("id");

        SomeModel model = new SomeModel() { Details = new Details() };
        model.Details.Id = int.Parse(value.AttemptedValue);

        //Or you can load the information from the database based on the Id, whatever you want.

        return model;
    }

}

Чтобы зарегистрировать ваше связующее, вы добавляете это к своему Application_Start()

ModelBinders.Binders.Add(typeof(SomeModel), new SomeModelBinder());

Ваш контроллер выглядит точно так же, как у вас выше. Это очень упрощенный пример, но самый простой способ сделать это. Я буду рад предоставить любую дополнительную помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...