所以我有一个包含以下字段的ViewModel:
List<Question> questions;
List<Answer> answers;
其中Question具有一个ICollection<Answer>
,每个答案均具有一个问题,即EF迁移样式。
我正在视图中显示数据,但是之后我想将其作为参数传递给后参数。 ViewModel包含以下数据: 3个问题 每个问题5个答案
我的视图如下:
@model SurveyAPI.Models.ViewModels.ShowSurveyViewModel
@using (Html.BeginForm())
{
@for (int i = 0; i < Model.questions.Count; i++)
{
@Html.TextBoxFor(p => Model.questions[i].QuestionText, new { style = "font-weight : bold" })
for (int ii = 0; ii <= Model.questions[i].Answers.Count; ii++)
{
@Html.HiddenFor(p => Model.answers[ii].Id)
@Html.TextBoxFor(p => Model.answers[ii].AnswerText)
@Html.HiddenFor(p => Model.answers[ii].Question)
}
<hr />
}
<input type="submit" />
}
但是我提交的不是全部。 相反,它保持:
3个问题(应如此)
5个答案(仅来自最后一个问题-我显然希望所有15个答案)。
每个答案(我收到的5个答案)都没有问题,即使该问题的“隐藏”字段中有数据。
我到底在做错什么,我该如何在后方法中接收与模型完全相同的对象?
答案 0 :(得分:1)
内部循环中的输入不引用问题对象,因此它始终从0开始。它们都具有相同的名称(因为它们对每个问题都从0开始),因此仅使用外部循环的第一次迭代中的那些对象。 要修复它,内循环应该看起来像这样:
for (int ii = 0; ii <= Model.questions[i].Answers.Count; ii++)
{
@Html.HiddenFor(p => p.questions[i].Answers[ii].Id)
@Html.TextBoxFor(p => p.questions[i].Answers[ii].AnswerText)
@Html.HiddenFor(p => p.questions[i].Answers[ii].Question)
}
每个HiddenFor和TextBoxFor应该都具有参考问题[i],因此输入名称将变得唯一并准确地张贴。
如果您要为问题和答案提供单独的属性,则内部循环变量不能从0开始,例如,它应如下所示:
@{ int index = 0; }
@for (int i = 0; i < Model.questions.Count; i++)
{
@Html.TextBoxFor(p => Model.questions[i].QuestionText, new { style = "font-weight : bold" })
for (int ii = 0; ii <= Model.questions[i].Answers.Count; ii++, index++)
{
@Html.HiddenFor(p => Model.answers[index].Id)
@Html.TextBoxFor(p => Model.answers[index].AnswerText)
@Html.HiddenFor(p => Model.answers[index].Question)
}
<hr />
}