2012-10-16 70 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內部對象的所有值。

相關問題