POST上的MVC4 Generic Collection模型问题

时间:2014-01-14 17:09:50

标签: c# asp.net asp.net-mvc asp.net-mvc-4 model

我正在尝试使用问卷调查模型实现一个基本的调查问卷引擎,如下所示:

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类型?

希望这个解释清楚,随时提出任何问题。

提前感谢所有

标记

1 个答案:

答案 0 :(得分:0)

如果有人试图达到同样的效果,我们会找到解决方法。

这篇文章on MSDN Magazine非常有用。

它解释了一些我不理解的关键概念,例如Model Binding是递归的,因此处理遍历整个对象图并为每个Type应用Model Binder。

通用抽象模型Binder的工作是我与自定义AbstractModelBinderProvider一起使用的解决方案。

希望这有助于某人

标记