提交 n 个表单 使用一个按钮 MVC .NET



我有一个页面,其中呈现了 2 个或更多部分视图。每个视图都是可提交的表单。为视图提供的模型是从保存对象和对象列表的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 数据库。

与其将它们分成单独的形式并重新组合它们,为什么不只创建 1 个格式良好的表单来提交呢?欢迎来到EditorTemplates的神奇世界!

1. 创建编辑器模板

/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

最新更新