Asp.net mvc 模型内部属性的自定义模型绑定器

Asp.net mvc 模型内部属性的自定义模型绑定器,asp.net-mvc,Asp.net Mvc,我的模型是这样的 public class MyModel { string ID {get;set;} string Title {get;set;} MyOtherModel Meta {get;set;} } 如何为类型(MyOtherModel)定义自定义模型绑定器,因此当默认绑定器绑定MyModel时,它会为“Meta”属性调用自定义模型绑定器。 我在App start中注册了它,如下所示: ModelBinders.Binders[typeof(MyOtherM

我的模型是这样的

public class MyModel
{
   string ID {get;set;}
   string Title {get;set;}
   MyOtherModel Meta {get;set;}
}
如何为类型(MyOtherModel)定义自定义模型绑定器,因此当默认绑定器绑定MyModel时,它会为“Meta”属性调用自定义模型绑定器。 我在App start中注册了它,如下所示:

 ModelBinders.Binders[typeof(MyOtherModel)] = new MyCustomBinder();

但这不起作用。有没有关于模型绑定器的更多信息的想法或好文章?

有一篇关于集合的文章涉及到一些复杂的类型映射内容:

另一方面,本文可以为您提供一些有用的提示:


我建议您作为一个解决方案使用MyModel类的模型绑定器,这不是一个完美的解决方案,但一旦发现更好的解决方案,您可以轻松地重构它。:)

实际上,如果您将MyModel类的模型放入一些编辑/创建视图,如下所示:

<%= Html.TextBox("Meta.Prop1") %>
将文本框值填充到自定义子模型属性中。返回时,文本框值也将填充该子模型值


因此,一旦更新了当前模型,您也在更新子模型。

我的意思是,无论有什么Ad类和Map类,Prop1都是空的。Map是Ad(Linq到SQL)的一个属性。工作正常,正在更新地图模型缩放属性。请将FormCollection作为参数添加到您的操作:public ActionResult Create(FormCollection表单)并查看哪些字段将用于您的操作。然后我们可以检查出哪里出了问题。另外,您应该为您的主要模型调用UpdateModel。是吗?什么不起作用?您是否尝试过在自定义活页夹中设置断点,以查看活页夹是否正确关联?我通常使用语法ModelBinders.Bonders.Add(typeof(MyOtherModel),newmycustombinder()
UpdateModel(model);