我正在使用MVC,请使用以下模型
public class Questionnaire
{
public string Name { get; set; }
public List<Question> Questions { get; set; }
}
和问题类是:
public class Question
{
public int QuestionNumber { get; set; }
public string Body { get; set; }
public IList<Option> Options { get; set; }
//public IEnumerable<CreativeFactory.Option> OptionsTemp { get; set; }
public Guid? QuestionnaireId { get; set; }
public Guid? SelectedOption { get; set; }
public int? SelectedEmployeeId { get; set; }
}
在我的视图中,我做了foreach,并部分渲染了一个视图
% Html.BeginForm("Submit", "Questionnaire", FormMethod.Post); %>
<%
foreach (var q in Model.Questions)
{
Html.RenderPartial("Question", q);
}
%>
<input type="submit" name="submit" value="submit" />
<% Html.EndForm(); %>
我的问题是我的操作的传递模型始终为null
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Submit(Questionnaire m)
{
}
编辑1: 好吧,我的部分查看代码是:
<%
foreach (var option in Model.Options)
{%>
<p/>
<%= Html.RadioButtonFor(x => x.SelectedOptionId, option.QuestionId, new { id = "test" + option.ID })%>
<%
}
%>
即使在调试模式下,我也无法在Form实例中找到我的集合 所以即使自定义绑定也无法解决问题,因为集合不存在
有什么想法吗?
答案 0 :(得分:3)
我认为您必须Questionnaire
实施ICollection<Question>
,然后按照Phil Haack's post中的详细说明进行操作。如果您不希望Questionnaire
实施ICollection<Question>
,我认为您需要实施Questionnaire
类型的自定义模型活页夹。
答案 1 :(得分:1)
这是您的部分代码,未经过测试。我假设一个基于零的QuestionNumber:
<input type="hidden" name="Questions[<%= Model.QuestionNumber %>].QuestionNumber" value="<%= Model.QuestionNumber %>" />
<% foreach (var option in Model.Options) { %>
<input type="radio" name="Questions[<%= Model.QuestionNumber %>].SelectedOptionId" value="<%= option.ID %>" /><%= option.Text %>
<% } %>
答案 2 :(得分:0)
完整答案:MVC post a list of complex objects 其中包含Phil Haack的解决方案和另一个解决方案:
@for (var itemCnt = 0; itemCnt < Model.Questions.Count(); itemCnt++)
{
@Html.TextBoxFor(m => Model.Questions[itemCnt].Body)
....
@Html.HiddenFor(m => Model.Questions[itemCnt].QuestionNumber )
}