【问题标题】:Submit n forms With one button MVC .NET一键提交 n 个表单 MVC .NET
【发布时间】:2023-03-31 23:42:01
【问题描述】:

我有一个页面,其中呈现了 2 个或更多部分视图。每个视图都是一个可提交的表单。为视图提供的模型是从MyProject.Models.CompositeModel 提交的,该MyProject.Models.CompositeModel 包含一个对象和一个对象列表(这两个对象都是 ADO.NET 模型,我们称它们为 Model_1 和 Model_2)。

渲染到局部视图的 2+ 个模型具有相同名称的属性,输入也具有相同名称(两者都在于 model_2 表单可以有 n 次迭代,以及它们自身具有的 2 个模型一些具有相同名称的属性)。

我这样渲染父视图:

@model MyProject.Models.CompositeModel
@{
    ViewBag.Title = "Edit";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Edit</h2>

@Html.Partial("_Table1EditRowPartial",Model.Table1RowData)
@foreach (var Table2RowData in Model.Table2Rows) { 
    @Html.Partial("_Table2EditRowPartial",Table2RowData)
}

...部分视图是:

@model MyProject.Models.Model_x

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.LabelFor(model => model.prop_1)
    @Html.EditorFor(model => model.prop_1)
    @Html.ValidationMessageFor(model => model.prop_1)

    ...

    @Html.LabelFor(model => model.prop_n)
    @Html.EditorFor(model => model.prop_n)
    @Html.ValidationMessageFor(model => model.prop_n)

    <input type="submit" value="Save" />
}

@Html.ActionLink("Back to List", "Index")

我需要一种通过 jQuery 或 .NET ajax 帮助程序库异步提交所有表单的方法。或者,如果我可以有一个按钮来分割和编辑模型,然后将其重新组合成CompositModel 并提交它。它可以是 Razor 语法或其他任何方法,任何一种方法都可以,如果有内置方式,我更愿意这样做,而不是扩展我的 lib 数据库。

【问题讨论】:

  • 为什么你只是把所有东西都包装在一个表格里?

标签: jquery asp.net-mvc forms asp.net-mvc-4 razor


【解决方案1】:

与其将它们分成单独的表单并重新组合,不如创建一个格式良好的表单来提交?欢迎来到EditorTemplates的魔法世界!

1。创建一个 EditorTemplate

/Views/Shared/EditorTemplates/Model_x.cshtml[parent_root]/EditorTemplates/Model_x.cshtml 中创建编辑器模板

它看起来像这样。

@model MyProject.Models.Model_x

@Html.LabelFor(model => model.prop_1)
@Html.EditorFor(model => model.prop_1)
@Html.ValidationMessageFor(model => model.prop_1)

...

@Html.LabelFor(model => model.prop_n)
@Html.EditorFor(model => model.prop_n)
@Html.ValidationMessageFor(model => model.prop_n)

2。在您的视图中使用编辑器模板。

它们将取代您对部分的使用(这不适用于表单)并且看起来像这样。

@model MyProject.Models.CompositeModel
@{
    ViewBag.Title = "Edit";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Edit</h2>

@using (Html.BeginForm())
{
    @Html.EditorFor(model => model.Table1RowData)
    for (int i = 0; i < Model.Table2Rows.Count(); i++)
    {
        @Html.EditorFor(m => m.Table2Rows[i])
    }
    <p><input type="submit" /></p>
}

3。成功!

张贴表格时,应该填写完整的模型MyProject.Models.CompositeModel

【讨论】:

  • 这正是我所需要的。
猜你喜欢
  • 1970-01-01
  • 2020-03-20
  • 2020-07-12
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
  • 2014-12-07
相关资源
最近更新 更多