Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC3绑定到子类_C#_Asp.net Mvc 3_Data Binding_Razor - Fatal编程技术网

C# ASP.NET MVC3绑定到子类

C# ASP.NET MVC3绑定到子类,c#,asp.net-mvc-3,data-binding,razor,C#,Asp.net Mvc 3,Data Binding,Razor,我有一个类型为Question的超类,它有多个子类(例如MultipleChiiceQuestion和TextQuestion)。每个子类都有自己的编辑器模板(例如~/Shared/EditorTemplates/MultipleChoiceQuestion.cshtml) 我想做的是创建问题对象列表: 然后,我将问卷传递给视图,在视图中我调用: @Html.EditorFor(m => m.Questions) 该视图成功呈现特定子类问题模型的正确编辑器模板 问题在于,当表单提交时,我

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

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

然后,我将问卷传递给视图,在视图中我调用:

@Html.EditorFor(m => m.Questions)
该视图成功呈现特定子类问题模型的正确编辑器模板

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

作为测试,我已经通过了一个类型为multipleechoicequestion的列表,它运行良好:

class Questionnaire {
    List<MultipleChoiceQuestion> Questions;
}
班级调查问卷{
列出问题;
}
有没有办法让HttpPost操作返回我的模型以及用表单数据实例化的子类


谢谢

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


你可能会找到一本有用的指南;它讨论了这个特定的问题。

这确实应该作为功能建议提交给ASP.NET MVC团队。我相信他们检查当前模型对象的
GetType()
,并基于此获取模板不会太难,这样做可能会解决问题=)托马斯,我认为这不是问题所在。为模型指定了一个类型,绑定器正在从表单中的数据构建该类型的实例。更确切地说,活页夹需要能够从表单中识别出所需的子类;因此需要一个定制的活页夹。你能发布MultipleChoiceQuestion.cshtml或至少部分吗?我知道我以前遇到过复选框没有返回正确值的问题。这可能是问题的一部分吗?是上面链接的帖子的更新版本。虽然这篇文章没有解决我的问题,但它确实让我找到了一个解决办法。通过将子类的类型传递给视图,我能够在自定义模型生成器中检索它,并使用反射创建子类的实例。
@Html.EditorFor(m => m.Questions)
class Questionnaire {
    List<MultipleChoiceQuestion> Questions;
}