【问题标题】:Model binding & derived model classes模型绑定和派生模型类
【发布时间】:2010-06-01 16:42:54
【问题描述】:

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

在我的场景中,我有一个强类型为 List<Person> 的视图。

我有几个继承自Person 的类,即PersonTypeOnePersonTypeTwo

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

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

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

这很好用,除了当用户提交表单时,相关的控制器操作方法只会得到一个List&lt;Person&gt;,而不是PersonPersonTypeOnePersonTypeTwo 的列表。

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

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

【问题讨论】:

    标签: asp.net-mvc-2 modelbinders model-binding


    【解决方案1】:

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

    【讨论】:

    • 您是说接收表单 POST 的操作方法应该接受与用于强类型视图的参数类型完全不同的参数吗?
    • 是的,这绝对是我要说的。如果您考虑一下,用于渲染的 ViewModel 将具有下拉查找值,可能是专门为渲染而格式化的文本以及各种其他可能的东西。您的操作所采用的模型实际上应该只具有要绑定的确切属性和任何相关的验证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2018-03-30
    相关资源
    最近更新 更多