我有一个类型为Question的父类(super class),其中有多个子类(例如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)

该 View 成功为特定的子类Question模型呈现了正确的编辑器模板。

问题在于,提交表单后,我的问卷模型(其中包含类型为Question的列表)仅包含Question的实例,而不包含子类的实例。此外,Question属性的实例全为空。

作为测试,我传递了一个MultipleChoiceQuestion类型的列表,它可以正常工作:
class Questionnaire {
    List<MultipleChoiceQuestion> Questions;
}

有什么方法可以让HttpPost Action返回带有通过表单数据实例化的子类的模型?

谢谢

最佳答案

我认为您正在遇到DefaultModelBinder的限制。要解决此问题,您需要使用客户模型活页夹。

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

关于c# - ASP.NET MVC3绑定(bind)到子类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6762168/

10-17 02:45