Ответ 1
Если кто-то сталкивается с этим вопросом из google, как я здесь, это ответ: Как получить контроль над привязкой к модели?
Короче: TryUpdateModel - это метод, который вы ищете.
Мне интересно, есть ли способ использовать встроенную привязку к модели, похожую на внутреннюю привязку модели, которая возникает перед действием контроллера.
Моя проблема в том, что я хочу иметь возможность контролировать привязку, поскольку я не буду знать тип объекта для привязки до тех пор, пока я не нахожусь в контексте действия контроллера.
Я понимаю, что могу наследовать DefaultModelBinder для выполнения пользовательской привязки, но я доволен тем, что уже предлагается, и просто хочу использовать его - возьмите этот идеальный пример, чтобы получить представление о том, что мне нужно:
public ActionResult DoCustomBinding(string modelType)
{
... // logic to determine type to check and create strong 'actual' type
object model = BindModel(actualType);
... // do something with bound model
return View();
}
Я изучил использование DefaultModelProvider, но не уверен, что это правильный способ обойти это, и я не был уверен, как получить ModelBindingContext.
Если кто-то сталкивается с этим вопросом из google, как я здесь, это ответ: Как получить контроль над привязкой к модели?
Короче: TryUpdateModel - это метод, который вы ищете.
Вы просматриваете интерфейс IModelBinder?
public class CustomModelsBinder : IModelBinder {
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { }
}
И затем добавьте это в свой файл global.asax:
protected override void OnApplicationStarted() {
ModelBinders.Binders.Add(typeof(CustomModels), new CustomModelsBinder());
}
Если вы хотите проверить только определенные части модели, это может быть дубликат вопроса, который я ранее ответил Обновления частичной модели MVC.
Прохладная часть об использовании System.ComponentModel.DataAnnotations.MetadataType заключается в том, что связующее устройство будет привязываться к производному объекту, который в основном такой же, как базовый объект, только с различными метаданными отображения/проверки.