2012-04-04 55 views
12

我想知道是否有方法使用内置模型绑定,类似于控制器操作之前发生的内部模型绑定。使用.Net Mvc手动模型绑定

我的问题是,我想能够控制绑定,因为我不知道要绑定的对象的类型,直到我实际上在控制器操作的上下文中。

我明白我可以继承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

你说得对。在这样一个有用的网站上这是不好的行为,我已经给了自己一个彻底的答案。 – 2012-04-04 20:46:41

+0

我会尽量更具体一些,我的最终目标是能够验证装饰有验证属性的类的单个属性。所以,只需要一个字符串名称来检查,字段名称和值(我们希望能够绑定模型(我需要从类型中解决),然后对它执行检查。 – 2012-04-04 20:50:05

+0

我要去看看ControllerActionInvoker http://aspnet.codeplex.com/SourceControl/changeset/view/72551#266452看起来它可能会让我知道它是如何在内部完成的。 – 2012-04-04 21:20:47

回答

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()); 
} 
+0

不是,我已经使用类似的东西来处理枚举。我想要使​​用内部引擎和类型说,这里是我想要创建和绑定的类型,去创建并绑定到它并带回结果(在控制器操作的正常例程之外)。 – 2012-04-04 20:52:59

0

,这可能是重复我以前回答MVC Partial Model Updates的问题。

关于使用System.ComponentModel.DataAnnotations.MetadataType的很酷的部分是,模型联编程序将保持绑定到派生对象,其基本上与基础对象相同,只是使用不同的显示/验证元数据。

+0

谢谢 - 这看起来很有用,我刚刚设法使绑定工作,所以我现在可以看到一些解决方案... – 2012-04-04 21:45:17