簡體   English   中英

ASP.NET MVC UpdateModel 與層次結構 Collections 綁定

[英]ASP.NET MVC UpdateModel binding with a Hierarchy of Collections

我有以下 Model 設計。

模板包含類別列表。 類別包含一個項目列表。

因此有 3 層層次結構。 因為 UI 設計要求在 1 個頁面上創建所有 3 個級別,所以我必須編寫一些自己的代碼才能使其正常工作。 它看起來如下:

頁面設計

我可以讓它提交回創建操作方法,FormCollection 如下所示。

用於創建的 FormValues

我遇到的問題是 UpdateModel 適用於模板和類別級別,但沒有為類別填充項目。 Html 如下所示。 如您所見,我對 id 使用了 Category[guid_value].Items[guid_value] 語法。 它不應該根據它自動計算綁定嗎?

在此處輸入圖像描述

為了使綁定起作用,我有什么遺漏或必須做的嗎?

如果您希望您的 html 正確綁定到您的 model,您必須注意您渲染的 html。 我可以看到你的 html 的問題是

<input type='hidden' value = 'Items.Index' value= 'some_guid' autocomplete = 'off'/>

with this html model binder will try to bind Items as children of Template object where it will not find any property named Items and these values will not be bound to the model. 您必須將隱藏字段更改為

<input type='hidden' name = 'Categories[category's guid].Items.Index' value = 'some guid' autocomplete = 'off'/>

你只需要在你的動作方法中調用 updatemodel 就像

UpdateModel(yourobject);

我沒有測試過這段代碼,但我非常確定以這種方式改變你的 html 會讓你排序。 @Mlchael Grassman,您不必再使用基於 integer 的 id 來綁定集合。 請閱讀史蒂夫的帖子以獲取更多信息。 實際上,您也不需要 GUID,而是在頁面上下文中唯一的隨機數,前提是您放置了一個額外的隱藏字段,名稱索引和值設置為上述隨機數。 我使用(和修改)Steve 編寫的 BeginCollectionItem 方法在 asp.net mvc 中寫了關於主詳細信息表單的博客。 在本博客系列的第一部分,我簡單地展示了如何在沒有 ajax 調用的情況下在客戶端動態添加詳細記錄的字段。 第二部分中,我將詳細記錄的編輯器模板帶到 jquery 模板引擎並在客戶端呈現它,就像通過 ajax 調用呈現時一樣。

默認情況下,MVC 使用以下命名約定。

Category[0].Items[0]
Category[0].Items[1]
Category[1].Items[0]
Category[1].Items[1]

您可以使用以下 TryUpdateModel 包含您自己的更新。 這可能需要某種循環,但應該讓你開始。

TryUpdateModel(Category[Guid].Items[Guid], "Category[Guid].Items[Guid]", null, new string[] { "ExcludedPropery1", "ExcludedPropery2", "ExcludedProperyN", });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM