繁体   English   中英

ASP.NET MVC复杂模型更新

[英]ASP.NET MVC Complex Model Updating

我有一个PersonViewModel,它由几个List<SubViewModel> (名称,地址等)组成。

我有一个HTML表单,其中包含每个SubViewModel的表格,用户可以在其中更新,添加,删除项目并将其设置为该人的主要条目。

名称的简化表:

@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中,以更新个人记录。 如果我只是在POST控制器中接受PersonViewModel ,那么它完全是空的。 我查看了FormCollection,但不确定是否适合此操作。 有经验的人能为我指出正确的方向来建立模型以进行更新吗? 非常感谢你。

每个人的答案都是正确的,但是,如果您想更新人们的信息,则需要使用Html Helper Editor NOT Display 另外,您仍然可以在视图中使用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>
}

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

@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>
}

尝试用for循环替换foreach:

@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临时变量方面做得更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM