我正在尝试显示和编辑“许可证申请”。 如果它是一张纸,顶部将有个人细节填写。 底部部分是一个垂直的问题列表,每行末尾有一个空格,用于为每个问题写一个答案。
所以我的模型是一个PermitApplication对象,它包含一个'Requestor'对象(申请者)和一个'Response'对象数组,这些对象是带有字符串'Answer'属性的问题。
经过大量的抨击我得出的结论可能是我试图在MVC下不起作用。即将这种模型提供给视图,编辑个人详细信息,填写问题的答案并将模型发回。 视图显示OK,但是当按下提交按钮时,传递回控制器的PermitApplication对象只填写了人员详细信息。返回的Responses对象为null。 我的MVC技能和理解是有限的所以我的问题是'解决这种情况的正确方法是什么?我的观点(最新尝试)如下:
@model PermitApply.Models.LclPermitApplication
@using (Html.BeginForm())
{
<div class="form-group">
@Html.LabelFor(model => model.Requestor.FirstName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Requestor.FirstName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Requestor.FirstName, "", new { @class = "text-danger" })
</div>
</div>
<h2>Permit Questions</h2>
<table class="table">
<tr>
<th>
Question Id
</th>
<th>Question</th>
<th>QuestionTypeId</th>
</tr>
@foreach (var item in Model.Responses)
{
<tr>
<td>
@Html.DisplayFor(p => item.QuestionId)
</td>
<td>
@Html.DisplayFor(p => item.Question)
</td>
<td>
@Html.DisplayFor(p => item.QuestionTypeId)
</td>
<td>
<div class="col-md-10">
@Html.EditorFor(p => item.Answer, new { id = item.QuestionId })
@Html.ValidationMessageFor(p => item.Answer, "", new { @class = "text-danger" })
</div>
</td>
</tr>
}
</table>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
}
答案 0 :(得分:0)
尝试将foreach循环更新到下面:
@count = 0;
@foreach (var item in Model.Responses)
{
<tr>
<td>
@Html.DisplayFor(p => item.QuestionId)
</td>
<td>
@Html.DisplayFor(p => item.Question)
</td>
<td>
@Html.DisplayFor(p => item.QuestionTypeId)
</td>
<td>
<div class="col-md-10">
@Html.EditorFor(p => item.Answer, new {name="Responses["+count+"].Answer", id = item.QuestionId })
@Html.ValidationMessageFor(p => item.Answer, "", new { @class = "text-danger" })
</div>
</td>
</tr>
count=count+1;
}
请阅读MVC模型绑定以更好地了解MVC如何绑定要发送给控制器的值。希望这会有所帮助。