簡體   English   中英

MVC模型屬性

[英]MVC Model Properties

我的最終問題是-模型綁定器應填充所有模型,還是僅填充要發布的位,而讓控制器填充其余模型?

例如,我要在系統中以及我希望用戶選擇新產品將出現在哪些站點的表單上添加產品。 因此,在我的模型中,我想填充一個名為“ AllAvailableSites”的集合,以呈現復選框供用戶選擇。 如果表單無法通過驗證,我還需要在帖子上填充任何選定的站點來填充模型,並且我需要代表顯示初始選擇的表單。 看來我應該讓模型綁定器在模型上設置選定的站點,並且(一旦在控制器方法中)就在模型上設置“ AllAvailableSites”。 聽起來對嗎? 在模型聯編程序中設置所有內容似乎更有效,但有人暗示這不太正確。

我感謝任何建議; 我不得不說,所有在線MVC模型綁定幫助似乎都引用了非常簡單的示例,沒有什么復雜的。

另外,我真的需要方法的GET和POST版本嗎? 他們不能只是采用相同的視圖模型嗎? 然后,我檢查模型綁定程序是否為GET / POST,並相應地填充所有模型。

您的初步結論是正確的。 模型綁定程序僅應擔心創建模型實例,並使用操作上下文中可用於模型的值(例如,發布值)填充其屬性,然后執行驗證。 然后,您的控制器負責填充視圖所需的任何其他值,例如可用站點列表。

我不確定您需要單獨的GET / POST方法的含義。 如果要保存或創建模型實例,則應該發布,因此GET部分似乎無關緊要。 除非您的意思是:

[HttpGet, ActionName("Edit")]
public ActionResult Edit(MyModel model)
{
   return View(model);
}

[HttpPost, ActionName("Edit")]
public ActionResult SaveEdit(MyModel model)
{
   // validate and save, then
   return View(model);
}

也許您想知道是否可以將它們組合成一個動作,並弄清楚它們是在查看編輯表單還是在動作中發布編輯表單的結果。 我強烈建議您不要這樣做。 有多種原因,但讓我們保持這種狀態即可。 不要做

暫無
暫無

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

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