2012-10-16 69 views
1

我正在使用ASP.NET MVC 4,但我不认为这个问题的目的是重要的。如何在ASP.NET MVC中编辑列表时保留输入ID?

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

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

+0

你可以发布你的部分视图的代码? – nemesv

回答

0

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

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

+0

终于有机会尝试一下。我无法得到它的工作...当我做一个foreach(Model.Items中的var listItem){@ Html.EditorFor(...);}我不知道应该把什么放在Html.EditorFor()括号来让这个工作?我已经尝试了@ html.EditorFor(m => listItem,“ListItemEditorTemplate”),但是这并不保留id,所以绑定不会发生。 –

+0

好的,只是尝试了一个for()循环而不是foreach,它现在可以工作。谢谢! –

0

除了通过@WebDeveloper
给出的答案你也可以尝试和创造,虽然有点复杂的自定义模型绑定,但会加重便于张贴并在长远的形式值绑定的对象
这里看看http://patrickdesjardins.com/blog/asp-net-mvc-model-binding

您必须手动采取一切形式的值,并将其绑定到model一次,然后你就可以在使用@HtmlFrom方法剃刀做一个只要你喜欢,你会得到action methods内部对象的所有值。

相关问题