栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MVC表单无法发布对象列表

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MVC表单无法发布对象列表

null
之所以建立模型,是因为您向表单提供输入的方式意味着模型联编程序无法区分元素。现在,此代码:

@foreach (var planVM in Model){    @Html.Partial("_partialView", planVM)}

没有为这些项目提供任何类型的索引。因此它将反复生成如下HTML输出:

<input type="hidden" name="yourmodelprefix.PlanID" /><input type="hidden" name="yourmodelprefix.CurrentPlan" /><input type="checkbox" name="yourmodelprefix.ShouldCompare" />

但是,由于要绑定到集合,因此需要使用索引来命名表单元素,例如:

<input type="hidden" name="yourmodelprefix[0].PlanID" /><input type="hidden" name="yourmodelprefix[0].CurrentPlan" /><input type="checkbox" name="yourmodelprefix[0].ShouldCompare" /><input type="hidden" name="yourmodelprefix[1].PlanID" /><input type="hidden" name="yourmodelprefix[1].CurrentPlan" /><input type="checkbox" name="yourmodelprefix[1].ShouldCompare" />

该索引使模型绑定器能够关联单独的数据,从而构建正确的模型。所以这是我建议您修复的方法。而不是使用局部视图来遍历您的集合,而是利用模板的功能。这是您需要遵循的步骤:

  1. EditorTemplates
    在视图的当前文件夹内创建一个文件夹(例如,如果视图为
    HomeIndex.cshtml
    ,则创建文件夹
    HomeEditorTemplates
    )。
  2. 在该目录中创建一个名称与您的模型匹配的强类型视图。在你的情况下
    PlanCompareViewModel.cshtml

现在,您在部分视图中拥有的所有内容都希望进入该模板:

@model PlanCompareViewModel<div>    @Html.HiddenFor(p => p.PlanID)    @Html.HiddenFor(p => p.CurrentPlan)    @Html.CheckBoxFor(p => p.ShouldCompare)   <input type="submit" value="Compare"/></div>

最后,您的父视图简化为:

@model IEnumerable<PlanCompareViewModel>@using (Html.BeginForm("ComparePlans", "Plans", FormMethod.Post, new { id = "compareForm" })){<div>    @Html.EditorForModel()</div>}

DisplayTemplates
并且
EditorTemplates
足够聪明,知道他们何时处理集合。这意味着它们将自动为表单元素生成正确的名称(包括索引),以便您可以对绑定到集合的模型进行正确建模。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/596999.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号