Привязать параметр маршрута к модели

#asp.net-mvc-3

#asp.net-mvc-3

Вопрос:

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

 /{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:

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

 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());
  

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