ASP.NET MVC的复杂模型修正(ASP.NET MVC Complex Model Updat

2019-10-19 04:18发布

我有一个由若干的PersonViewModel List<SubViewModel>姓名,地址等)

我有每个SubViewModel,在这里用户可以更新,添加,删除,设置项目为个人主项表的HTML表单。

为名称的简化表:

@foreach (PersonNameViewModel name in Model.Names)
{
  <tr>
     <td>
         @Html.DisplayFor(modelItem => name.FullName)
     </td>
     <td>
         @Html.DisplayFor(modelItem => name.FirstName)
     </td>
     <td>
         @Html.DisplayFor(modelItem => name.MiddleName)
     </td>
     <td>
         @Html.DisplayFor(modelItem => name.LastName)
     </td>
     <td class="center">
         @Html.RadioButtonFor(modelItem => name.IsPrimary, "")
     </td>
     <td class="center">
         @Html.CheckBoxFor(modelItem => name.ToDelete)
     </td>
  </tr>
}

从这里,我不知道如何让所有的数据回PersonViewModel当用户提交表单,更新个人记录。 如果我只是接受PersonViewModel在我的岗位控制器,它是完全空的。 我看着的FormCollection,但我不知道这该是正确的。 有经验的人能指出我在我的建筑模型备份更新正确的方向? 非常感谢你。

Answer 1:

每个人的答案是正确的,但如果你想更新人的信息,你需要使用HTML辅助EditorDisplay 。 此外,您仍然可以使用foreach在你看来,只要改变它象下面这样:

@foreach (var name in Model.Names.Select((value, i) => new { i, value }))
{
    <tr>
        <td>
            @Html.EditorFor(m => m.Names[@name.i].FullName)
        </td>
        <td>
            @Html.EditorFor(m => m.Names[@name.i].FirstName)
        </td>
        <td>
            @Html.EditorFor(m => m.Names[@name.i].MiddleName)
        </td>
        <td>
           @Html.EditorFor(m => m.Names[@name.i].LastName)
        </td>
        <td class="center">
            @Html.RadioButtonFor(m => m.Names[@name.i].IsPrimary,"")
        </td>
        <td class="center">
            @Html.CheckBoxFor(m => m.Names[@name.i].ToDelete)
        </td>
    </tr>
}


Answer 2:

你应该用某事像这样(约模型集合和复杂的数据绑定好文章在这里 ):

@for(var i = 0;i < Model.Names.Count;i++)
{
  <tr>
     <td>
         @Html.DisplayFor(m => Model.Names[i].FullName)
     </td>
     <td>
         @Html.DisplayFor(m => Model.Names[i].FirstName)
     </td>
     <td>
         @Html.DisplayFor(m => Model.Names[i].MiddleName)
     </td>
     <td>
         @Html.DisplayFor(m => Model.Names[i].LastName)
     </td>
     <td class="center">
         @Html.RadioButtonFor(m => Model.Names[i].IsPrimary, "")
     </td>
     <td class="center">
         @Html.CheckBoxFor(m => Model.Names[i].ToDelete)
     </td>
  </tr>
}


Answer 3:

尝试用替换的foreach的for循环:

@for (int i = 0; i < Model.Names.Count; i++)
{
    <tr>
         <td>
                 @Html.DisplayFor(m => m.Names[i].FullName)
         </td>
         <td>
                 @Html.DisplayFor(m => m.Names[i].FirstName)
         </td>
         <td>
                 @Html.DisplayFor(m => m.Names[i].MiddleName)
         </td>
         <td>
                 @Html.DisplayFor(m => m.Names[i].LastName)
         </td>
         <td class="center">
                 @Html.RadioButtonFor(m => m.Names[i].IsPrimary, "")
         </td>
         <td class="center">
                 @Html.CheckBoxFor(m => m.Names[i].ToDelete)
         </td>
    </tr>
}

表达式解析/模型绑定不与除用foreach临时变量指标做得更好。



文章来源: ASP.NET MVC Complex Model Updating