ASP.NET MVC3绑定到子类

时间:2011-07-20 12:49:30

标签: c# asp.net-mvc-3 data-binding razor

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

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

class Questionnaire {
    List<Question> Questions;
}

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

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

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

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

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

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

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

class Questionnaire {
    List<MultipleChoiceQuestion> Questions;
}

有什么方法可以让HttpPost Action返回我的模型,并使用我的表单数据实例化子类?

由于

1 个答案:

答案 0 :(得分:2)

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

您可能会发现this post是一本有用的指南;它谈到了这个具体问题。