我想知道是否有办法使用类似于在控制器操作之前发生的内部模型绑定的内置模型绑定。
我的问题是我希望能够控制绑定,因为我不知道要绑定的对象的类型,直到我实际上在控制器操作的上下文中。
我知道我可以继承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。
答案 0 :(得分:12)
如果有人从谷歌遇到这个问题,我在这里做的就是答案:How to gain control over model binding?
简而言之:TryUpdateModel是您正在寻找的方法。
答案 1 :(得分:1)
如果您只想验证模型的特定部分,这可能与我之前回答MVC Partial Model Updates的问题重复。
关于使用System.ComponentModel.DataAnnotations.MetadataType的一个很酷的部分是模型绑定器将继续绑定到派生对象,该派生对象与基础对象基本相同,只是使用不同的显示/验证元数据。
答案 2 :(得分:0)
您是否正在研究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());
}