我正在尝试使用问卷调查模型实现一个基本的调查问卷引擎,如下所示:
public class Questionnaire
{
public ICollection<Step> Steps { get; set; }
}
public class Step
{
ICollection<IQuestion> Questions { get; set; }
}
public class TextBoxQuestion : IQuestion
{
public QuestionTypeEnum QuestionType { get; set; }
public string QuestionText { get; set; }
}
public class DropDownQuestion : IQuestion
{
public QuestionTypeEnum QuestionType { get; set; }
public string QuestionText { get; set; }
public IList<string> Options { get; set; }
}
QuestionEditor模板:
@model IList<Models.IQuestion>
@for (int i = 0; i < @Model.Count(); i++)
{
@Html.EditorFor(x => x[i], @Model[i].QuestionType.ToString());
}
TextBoxQuestion编辑器:
public class TextBoxQuestion : IQuestion
{
public QuestionTypeEnum QuestionType { get; set; }
public string QuestionText { get; set; }
}
DropDownQuestion编辑器:
public class DropDownQuestion : IQuestion
{
public QuestionTypeEnum QuestionType { get; set; }
public string QuestionText { get; set; }
}
大致跟随Jon Egerton's example here我正在实现IQuestion接口的通用ICollection。 MVC按类型解释每个IQuestion,并相应地呈现TextBoxQuestion或DropDownQuestion编辑器模板。大。
然而,当问卷调查模型回发给Controller时,IQuestion集合全部为空。
任何人都可以帮助我建议是否有更好的方法,或者我是否可以连接DependencyResolver或其他东西,以便MVC可以将我的IQuestion对象解释为TextBoxQuestion和DropDownQuestion类型?
希望这个解释清楚,随时提出任何问题。
提前感谢所有
标记
答案 0 :(得分:0)
如果有人试图达到同样的效果,我们会找到解决方法。
这篇文章on MSDN Magazine非常有用。
它解释了一些我不理解的关键概念,例如Model Binding是递归的,因此处理遍历整个对象图并为每个Type应用Model Binder。
通用抽象模型Binder的工作是我与自定义AbstractModelBinderProvider一起使用的解决方案。
希望这有助于某人
标记