MVC表单无法发布对象列表

MVC表单无法发布对象列表,第1张

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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5588189.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存