1

我正在使用 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,以便模型在提交时自动绑定?

4

2 回答 2

0

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

例如看这个问题:在同一视图中更新多个项目

于 2012-10-16T07:30:20.303 回答
0

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

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

于 2012-10-16T07:37:31.830 回答