ASP.NET MVC3绑定到子类

我有一个类型为Question的超类,它有多个子类(例如MultipleChoiceQuestionTextQuestion )。 每个子类都有自己的编辑器模板(例如〜/ Shared / EditorTemplates / MultipleChoiceQuestion.cshtml )。

我想要做的是创建一个Question对象列表:

class Questionnaire { List Questions; } 

这将真正包含子类的实例:

 Questions.Add(new MultipleChoiceQuestion()); Questions.Add(new TextQuestion()); 

然后我将调查问卷传递给View,我打电话给:

 @Html.EditorFor(m => m.Questions) 

视图成功呈现特定子类问题模型的正确编辑器模板。

问题是,在提交表单时,我的问卷调查模型(包含类型问题列表)仅包含问题的实例,而不包含子类的实例。 此外, Question属性的实例都为null。

作为测试,我已经传入了一个类型为MultipleChoiceQuestion的列表,它工作正常:

 class Questionnaire { List Questions; } 

有没有办法让HttpPost Action返回我的模型,并使用我的表单数据实例化子类?

谢谢

我认为你正在遇到DefaultModelBinder的限制。 要解决此问题,您需要使用客户模型绑定器。

你可能会发现这篇文章是一本有用的指南 它谈到了这个具体问题。