我有一个类型为Question的超类,它有多个子类(例如MultipleChoiceQuestion和TextQuestion)。每个子类都有自己的编辑模板(例如~/Shared/EditorTemplates/MultipleChoiceQuestion.cshtml)。
我想要做的是创建一个Question对象列表:
class Questionnaire {
List<Question> Questions;
}
这将真正包含子类的实例:
Questions.Add(new MultipleChoiceQuestion());
Questions.Add(new TextQuestion());
然后我将问卷传递给View,在那里我调用:
@Html.EditorFor(m => m.Questions)
视图成功地为特定子类 Question 模型渲染了正确的编辑器模板。
问题在于,当表单提交时,我的 Questionnaire 模型(包含类型为 Question 的列表)仅包含 Question 的实例,而不包括子类的实例。此外, Question 属性的实例均为空。
作为测试,我传入了一个类型为 MultipleChoiceQuestion 的列表,它可以正常工作:
class Questionnaire {
List<MultipleChoiceQuestion> Questions;
}
有没有办法让HttpPost Action返回我的模型,并使用表单数据实例化其中的子类?
谢谢。
GetType()
并基于此获取模板不会太难 - 这样做可能会解决问题 =) - Tomas Aschan