Asp.net mvc 2 模型绑定&;派生模型类

Asp.net mvc 2 模型绑定&;派生模型类,asp.net-mvc-2,modelbinders,model-binding,Asp.net Mvc 2,Modelbinders,Model Binding,当您拥有从其他模型继承的模型类时,ASP.NET MVC是否提供了使模型绑定工作的简单方法 在我的场景中,我有一个强类型为列表的视图 我有两个类继承自Person,即PersonTypeOne和PersonTypeTwo 我有三个强类型的局部视图,它们的名称与这些类名匹配(并为各自模型的属性呈现表单元素) 这意味着在我的主要视图中,我可以拥有以下代码: <% for(int i = 0; i < Model.Count; i++) { Html.RenderPa

当您拥有从其他模型继承的模型类时,ASP.NET MVC是否提供了使模型绑定工作的简单方法

在我的场景中,我有一个强类型为
列表的视图

我有两个类继承自
Person
,即
PersonTypeOne
PersonTypeTwo

我有三个强类型的局部视图,它们的名称与这些类名匹配(并为各自模型的属性呈现表单元素)

这意味着在我的主要视图中,我可以拥有以下代码:

<% for(int i = 0; i < Model.Count; i++)
   { 
       Html.RenderPartial(Model[i].GetType().Name, Model[i]);
   } %>

这很有效,除了当用户提交表单时,相关的控制器操作方法只会得到一个
列表
,而不是
的列表

这与预期的差不多,因为表单提交没有包含足够的信息来告诉默认模型绑定器创建
PersonTypeOne
PersonTypeTwo
类的任何实例


那么,有没有办法从默认的模型绑定器中获得这样的功能?

您应该创建单独的模型来绑定到您的输入。您的ViewModels和EditModels是真正不同的职责,因此应该有自己的对象。

您是说接收表单帖子的操作方法应该接受与强类型视图完全不同的类型的参数吗?是的,这绝对是我要说的。仔细想想,用于渲染的ViewModel将具有下拉查找值,可能是专门为渲染而格式化的文本以及所有其他可能的内容。您的操作所采用的模型实际上应该只具有要绑定的确切属性和任何相关的验证。