我有一个包含一份问题清单一FeedbackViewModel的列表:MVC后复杂的对象
public class FeedbackViewModel
{
public List<QuestionViewModel> Questions { get; set; }
}
这QuestionViewModel是可以通过5种不同类型的问题被继承的对象
public class QuestionViewModel
{
public string QuestionText { get; set; }
public string QuestionType { get; set; }
}
一个继承问题类型的例子:
public class SingleQuestionViewModel : QuestionViewModel
{
public string AnswerText { get; set; }
}
在在控制器Index
行动我从数据库中的问题,并在FeedbackViewModel
问题列表中添加正确的问题类型,然后,我使这个模型视图:
@using (Html.BeginForm())
{
//foreach (var item in Model.Questions)
for (int i = 0; i < Model.Questions.Count; i++)
{
<div class="form-group">
@Html.DisplayFor(modelItem => Model.Questions[i].QuestionText, new { @class = "control-label col-md-4" })
<div class="col-md-6">
@if (Model.Questions[i].QuestionType == "Single")
{
@Html.EditorFor(modelItem => (Model.Questions[i] as OpenDataPortal.ViewModels.SingleQuestionViewModel).AnswerText)
}
else if (Model.Questions[i].QuestionType == "Multiple")
{
@Html.TextAreaFor(modelItem => (Model.Questions[i] as OpenDataPortal.ViewModels.SingleQuestionViewModel).AnswerText)
}
else if (Model.Questions[i].QuestionType == "SingleSelection")
{
@Html.RadioButtonForSelectList(modelItem => (Model.Questions[i] as OpenDataPortal.ViewModels.SingleSelectionQuestionViewModel).SelectedAnswer,
(Model.Questions[i] as OpenDataPortal.ViewModels.SingleSelectionQuestionViewModel).SelectionAnswers)
}
else if (Model.Questions[i].QuestionType == "MultipleSelection")
{
@Html.CustomCheckBoxList((Model.Questions[i] as OpenDataPortal.ViewModels.MultipleSelectionQuestionViewModel).AvailableAnswers)
}
else if (Model.Questions[i].QuestionType == "UrlReferrer")
{
@Html.EditorFor(modelItem => (Model.Questions[i] as OpenDataPortal.ViewModels.SingleQuestionViewModel).AnswerText)
}
</div>
</div>
<br />
}
<br />
<button type="submit">Submit</button>
}
现在,我简直无法让它在模型中发布问题列表。是否有可能发布不同对象类型的列表?
编辑:下面是我使用发现小提琴手在帖子内的数据列表:
我看不出有任何理由不应该工作。只要输入的名称设置正确,您应该收到数据。但是,您的问题可能来自默认模型联编程序。你的复杂类型可能太复杂了,因为它是_skills_。您应该首先检查名称是否设置正确,然后检查发布到服务器的数据并编写您自己的模型绑定器。 – 2014-10-02 06:50:04
@AndreiV - 我检查了使用fiddler从页面发布的名称和值,并将其添加到上面的问题中。价值似乎在那里。你觉得我需要写一个模型绑定器吗? (从来没有这样做过) – Carel 2014-10-02 07:21:55
没有看到确切的POST数组,我只是猜测,但是:如果你想模型绑定任何类型的集合,索引不能跳过数字,或者模型联编程序跳过所有东西后。因此,如果您的POST值与Questions [1] .SelectedAnswer等类似,您将遇到默认模型联编程序的问题。 – 2014-10-02 07:28:13