gpt4 book ai didi

c# - MVC EditorFor model binding for multiple edit forms on a page

转载 作者:太空狗 更新时间:2023-10-29 21:28:13 24 4
gpt4 key购买 nike

我有一个类叫做 CategoryModel ,其中一个属性是相同类型的对象列表。所以CategoryModel.Categories类型为 List<CategoryModel> .

在类别索引页面上,我为每个类别显示了一个编辑器,这样用户就可以更改任何类别名称,而无需转到专用页面来执行此操作。像这样:

<ul id="categories>
@Html.EditorFor(model => model.Categories)
</ul>

以及 CategoryModel 的编辑器模板看起来像这样:

<li class="folder">
@using (Html.BeginForm("Edit", "Category", new { id = Model.Key }, FormMethod.Post, new { @class = "ajaxoff"})) {
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.Key)
@Html.HiddenFor(model => model.ParentKey)
@Html.HiddenFor(model => model.Sequence)
@Html.HiddenFor(model => model.IncludeDeleted)

@Html.TextBoxFor(model => model.Name, null, new { @class = "catName" })
@Html.ValidationMessageFor(model => model.Name)

<input type="submit" value="Save" class="icon save" />
}
</li>

我遇到的问题是提交表单没有正确绑定(bind)到 Edit CategoryController 的 Action :

[HttpPost]
public ActionResult Edit(CategoryModel category)
{
// At this point all properties in category are null
}

如果我检查隐藏字段和文本框上的名称,它们会根据它们在当前类别中的位置进行标记(例如 Categories[0].Name )。然而,如果我创建一个专用的编辑 View ,它们只是根据字段名称命名(例如 Name )。

我尝试更改 Controller 以接受类别列表:

[HttpPost]
public ActionResult Edit(List<CategoryModel> categories)
{
var category = categories.First();
}

如果我提交第一个类别,但没有提交其他类别(在那些情况下 Categories 为空),这会起作用。

我还尝试通过这样做来更改我显示 EditorFor 的方式:

<ul id="categories>
@foreach (var cat in Model.Categories)
{
@Html.EditorFor(model => cat);
}
</ul>

将每个类别的字段名称更改为相同(例如,所有类别名称都称为 cat.Name ),我认为这是朝着正确方向迈出的一步。

那么我该如何正确绑定(bind)到我的 Controller 呢?我意识到我可以提交整个父类别,然后保存每个子类别,但这似乎是提交单个更改的一种非常低效的方式。

最佳答案

我发现了如何做到这一点。 Html.EditorFor 有一个重载,允许您指定 htmlFieldName 属性(下例中的第三个参数):

@foreach (var cat in Model.Categories)
{
@Html.EditorFor(model => cat, null, "");
}

这会呈现所有没有任何前缀的字段名称,并允许我成功提交任何单个类别。

关于c# - MVC EditorFor model binding for multiple edit forms on a page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17615655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com