Asp.net mvc 3 MVC3 Razor模型绑定器和继承的集合

Asp.net mvc 3 MVC3 Razor模型绑定器和继承的集合,asp.net-mvc-3,collections,razor,modelbinders,Asp.net Mvc 3,Collections,Razor,Modelbinders,我希望我没有遗漏一些非常明显的东西,但有什么原因可以解释为什么model binder在绑定从集合继承的视图模型时总是遇到问题吗 假设我想显示一个分页列表,显示一个组合框,并在上面添加按钮(处理简单列表)。所涉及的课程如下所示: public class PagedList<T> : List<T> { public int TotalCount { get; set; } } 以及控制器HttpPost操作: public ActionResult(MyVie

我希望我没有遗漏一些非常明显的东西,但有什么原因可以解释为什么model binder在绑定从集合继承的视图模型时总是遇到问题吗

假设我想显示一个分页列表,显示一个组合框,并在上面添加按钮(处理简单列表)。所涉及的课程如下所示:

public class PagedList<T> : List<T>
{
    public int TotalCount { get; set; }
}
以及控制器HttpPost操作:

public ActionResult(MyViewModel viewModel)
{
    ...
}
上述操作将导致ActionResult中的viewModel为空。有没有合乎逻辑的解释?据我所知,它只适用于查看从集合继承的模型

我知道我可以使用定制绑定器来解决这个问题,但是所涉及的属性是基本类型,甚至没有任何泛型或继承


我修改了视图模型,将集合继承类型作为属性,从而解决了这个问题。然而,我仍然在琢磨为什么活页夹会在上面坏掉。任何有建设性的想法都值得赞赏。

有时,如果表单post中的数据格式不同,那么与集合的模型绑定效果会更好

我使用了一个名为postfy的插件


回答我自己的问题:我所有与集合有关的模型不再从泛型列表或类似的列表继承,而是具有所需集合类型的属性。这工作得更好,因为渲染时可以使用

@Html.EditorFor(m => m.CollectionProperty)
并在Views/Shared/EditorTemplates下为包含的类型创建自定义编辑器。它还可以很好地与model binder配合使用,因为集合中的所有单个项目都会得到一个索引,并且binder能够在提交时自动绑定它


经验教训:如果您计划在视图中使用模型,请不要从集合类型继承。

到目前为止,我一直坚持使用视图模型声明具有集合继承类型的属性,而不是从一个视图继承,因为找不到其他可行的解决方案。这种方法的唯一问题是它使AutoMapper的事情变得复杂,因为现在必须显式地设置属性,而不是自动映射。嗯,协变-以前从未用过,谢谢Devin。当然是一个有趣的插件,但在本例中,它与javascript无关。通常,我希望我的所有web应用程序在没有JavaScript的情况下工作,并且只将其用作增强功能。在这种情况下,MVC3提供的绑定器不知道如何使用集合模型帖子。我所寻找的是一种构造视图模型或从正确的基集合继承的方法,即它是正确绑定的。
public ActionResult(MyViewModel viewModel)
{
    ...
}
@Html.EditorFor(m => m.CollectionProperty)