【问题标题】:How to preserve input ids when editing lists in ASP.NET MVC?在 ASP.NET MVC 中编辑列表时如何保留输入 ID?
【发布时间】:2012-10-16 07:14:29
【问题描述】:

我正在使用 ASP.NET MVC 4,但我认为这对于这个问题的目的并不重要。

我的编辑视图有一个相对复杂的模型。像这样:

public class Recipe_model
{
    public string Name { get; set; }

    public List<Recipe_Ingredient_model> Ingredients { get; set; }
}

成分在哪里

public class Recipe_Ingredient_model
{
    public int RecipeID { get; set; }

    public int? UnitID { get; set; }

    public double? Quantity { get; set; }

    public Ingredient_model Ingredient { get; set; }
}

它本身包含成分模型。

当我为此制作表单时,内置的Html.EditorFor() 不适用于Recipe_model 的属性之外的任何内容,因此我使用局部视图来显示每个子的编辑器模型。

就界面而言,这工作正常,但是当我将表单提交到控制器并尝试使用自动绑定到Recipe_model

    [HttpPost]
    public ActionResult Edit(Recipe_model model)
    {
        return View(model);
    }

它失败是因为部分视图中输入元素的 id 不符合正确的模式(我认为 ParentModel_Property)。

除了硬编码部分视图中的 id 或从控制器中的 FormCollection 手动绑定之外,有没有办法在部分视图中生成正确的 id,以便模型在提交时自动绑定?

【问题讨论】:

  • 可以贴出部分视图的代码吗?

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4


【解决方案1】:

这是常见问题。而不是简单的部分,使用EditorTemplates(模型的特殊文件夹),绑定将自动工作。

例如看这个问题:Updating multiple items within same view

【讨论】:

  • 终于要试试这个了。我无法让它工作......当我做一个 foreach (var listItem in Model.Items){ @Html.EditorFor(...);} 我不知道在 Html.EditorFor() 中放什么括号让这个工作?我试过@html.EditorFor(m => listItem, "ListItemEditorTemplate"),但这并没有保留id,所以绑定不会发生。
  • 好的,刚刚尝试使用 for () 循环而不是 foreach,它现在可以工作了。谢谢!
【解决方案2】:

除了@WebDeveloper给出的答案
您也可以尝试创建一个自定义模型绑定器,虽然稍微复杂一些,但从长远来看,这会增加发布和绑定表单值到对象的便利性
看看这里http://patrickdesjardins.com/blog/asp-net-mvc-model-binding

您将不得不手动获取所有表单值并将它们绑定到 model 一次,然后您将能够使用剃须刀上的 @HtmlFrom 方法做任何事情,您将获得内部对象内的所有值action methods随你喜欢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多