将动态对象与 ASP.NET MVC 模型绑定一起使用

Kev*_*Kev 5 asp.net-mvc model-binding asp.net-mvc-3

在 ASP.NET MVC3 应用程序中,如果我想将我的表单发布数据模型绑定到一个ExpandoObject(或从DynamicObject我实现自己的Try...成员的位置派生的我自己的对象),我是否需要编写自己的自定义模型绑定器?

如果我做:

public ActionResult Save(ExpandoObject form)
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

formIS null

或者如果我有:

public class MyDynamicThing : DynamicObject
{
    public int Id { get; set; }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        // Set breakpoint here but doesn't get hit when model binding
        return base.TrySetMember(binder, value);
    }
}
Run Code Online (Sandbox Code Playgroud)

...在我的控制器中:

public ActionResult Save(MyDynamicThing form)
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子Id中设置为来自表单的值。但是,如果我在TrySetMember此设置断点,则不会被击中。

是否有任何神奇的咒语我可以调用来强制内置模型绑定器使用ExpandoObjects或我自己的派生类DynamicObject

我可以诉诸于获取原始表单发布集合,但我必须将此数据序列化为 JSON,这意味着收集这些值需要一个额外且不整洁的步骤。

Dar*_*rov 2

不,这对于内置模型绑定器是不可能的。您当然可以编写自定义模型绑定程序。内置模型绑定器能够绑定的唯一属性是从类型看来MyDynamicThing的属性,这就是它只能设置该Id属性的原因。它不知道其他属性。