根据您之前的问题,您的问题似乎并不那么复杂。你让它变得比它必须要困难得多。您所需要的只是一个如下所示的简单模型:
public class Container {
public List<Container> Containers {get;set;}
public Question Question {get;set;}
}
public class Question {
public List<Answer> Answers {get;set;}
}
只是在这里猜测,一个答案可能不能包含任何东西,所以它需要自己的对象,一个问题只能包含答案。如果一个问题可以包含其他问题或容器,那么您可以稍微修改一下以使其正常工作。
这些都不需要特殊的模型粘合剂。
您不需要从单个基中继承所有对象,也不需要使用奇怪的模板选择器。
您可以通过执行以下操作来做到这一点:
EditorTemplates/Container.cshtml
@model Container
@Html.EditorFor(m => m.Containers)
@Html.EditorFor(m => m.Question)
EditorTemplates/Question.cshtml
@model Question
@Html.EditorFor(m => m.Answers)
EditorTemplates/Answer.cshtml
@model Answer
// whatever your answer code is.. if you have multiple answer types then you
// need a template for each type
默认的 MVC 模板系统将为您处理所有这些,并为您绑定所有内容。您只需要在将模型传递给视图之前正确地实例化您的模型。