用于编辑模型的MVC @Razor视图

时间:2017-05-02 04:55:48

标签: asp.net-mvc razor

我正在尝试显示和编辑“许可证申请”。 如果它是一张纸,顶部将有个人细节填写。 底部部分是一个垂直的问题列表,每行末尾有一个空格,用于为每个问题写一个答案。

所以我的模型是一个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>

}

1 个答案:

答案 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如何绑定要发送给控制器的值。希望这会有所帮助。