我是MVC3的新手。在HttpPost上綁定MVC3的嵌套模型
我有一個窗體上的提交按鈕,我想綁定一個模型,它有2-3個嵌套對象模型,裏面有很多屬性。
有沒有辦法在不使用EditorFor的情況下綁定這些嵌套對象;所以當我提交表單時,我將對正在返回的模型採取ActionResult(Object model),嵌套對象使用它們的值進行模型化,而無需在html上實現隱藏值或表單。
我是MVC3的新手。在HttpPost上綁定MVC3的嵌套模型
我有一個窗體上的提交按鈕,我想綁定一個模型,它有2-3個嵌套對象模型,裏面有很多屬性。
有沒有辦法在不使用EditorFor的情況下綁定這些嵌套對象;所以當我提交表單時,我將對正在返回的模型採取ActionResult(Object model),嵌套對象使用它們的值進行模型化,而無需在html上實現隱藏值或表單。
基本上,您需要足夠的值來再次識別您的模型。因此,您可以在隱藏字段中使用ID以及您想要更改的所有屬性。 要重新創建您的模型,只需傳遞Id並通過基本參數將值更改爲您的控制器操作或編寫一個model-binder - 恕我直言,這是處理這些情況的最佳方式。
DefaultModelBinder
按慣例工作,所以爲了工作,表單字段必須遵守MVC命名約定。
如果您不想使用EditorForModel
創建表單,那麼您必須爲每個字段實現自己的命名約定,併爲每個元素設置ViewData.TemplateInfo.HtmlFieldPrefix
。然後,你將不得不創建一個自定義的ModelBinder來獲取返回的表單,並根據你的命名約定綁定到你的模型。
請注意,這會在MVC3中創建一些其他問題,其中最重要的是對DropDownLists和其他項目進行不顯眼驗證的渲染可能會失敗。
對於一般情況,最好在您的視圖中使用EditorForModel,並使用MVC的現有約定。您可以創建一個特定於每個嵌套模型的視圖。 Brad Wilson對this article中的過程給出了很好的概述。
試試我的解決方案https://stackoverflow.com/questions/47644699/how-to-bind-nested-objects-on-httppost-in-asp-net-mvc/47645228#47645228 –