Asp.net
ViewBag 名稱可以與 DropDownList 中的 Model 屬性名稱相同嗎?
我正在開發一個 ASP.NET MVC-4 Web 應用程序。我在我的操作方法中定義了以下內容來建構
SelectList:ViewBag.CustomerID = new SelectList(db.CustomerSyncs, "CustomerID", "Name");然後我在我
DropDownListFor的內部渲染我的如下View:@Html.DropDownListFor(model => model.CustomerID, (SelectList)ViewBag.CustomerID, "please select")如圖所示,我將
ViewBag屬性命名為等於Model屬性名稱CustomerID. 根據我自己的測試,定義相同的名稱不會導致任何問題或衝突,但我應該避免這種情況嗎?
您不應該為模型屬性和
ViewBag屬性使用相同的名稱(理想情況下,您根本不應該使用ViewBag,而應該使用具有IEnumerable<SelectListItem>屬性的視圖模型)。使用
@Html.DropDownListFor(m => m.CustomerId, ....)第一個"Please Select"選項時,即使模型屬性的值已設置並匹配其中一個選項,也將始終選中。原因是該方法首先IEnumerable<SelectListItem>根據您提供的方法生成一個新的,以便設置Selected屬性的值。為了設置Selected屬性,它讀取CustomerIDfrom的值,ViewData它找到的第一個是"IEnumerable<SelectListItem>"(不是模型屬性的值)並且無法將該字元串與您的任何選項匹配,因此選擇了第一個選項(因為某些必須)。使用時
@Html.DropDownList("CustomerId", ....),不會data-val-*生成任何屬性,也不會得到任何客戶端驗證請參閱此 DotNetFiddle顯示可能案例的比較。只有對模型屬性和
ViewBag屬性使用不同的名稱,它才能正常工作。