[英]MVC 3 Dropdown losing selected value with ViewBag
我遇到了下拉菜單和 viewbag 的問題。 我在 controller 中使用以下代碼設置下拉列表:
applicationGuid = new Guid(form["applicationList"]);
var applications = _applicationRepository.List();
ViewBag.applicationList = new SelectList(applications, "Id", "Name", applicationGuid);
在視圖中,這完美地工作並返回先前選擇的值(applicationGuid):
@Html.DropDownList("applicationList", "")
現在我想使用以下代碼,因為我想向下拉列表中添加一些屬性:
@Html.DropDownList("applicationList", ViewBag.applicationList as SelectList, "", new { rel = "0", @class = "required" })
但由於某種原因,未呈現所選值(即使它被傳遞給視圖,我可以看到 selected = "true" 與 ViewBag SelectList 中的正確項目相對)。
上面的兩個示例呈現為(這個具有 selected="selected"):
<select id="applicationList" name="applicationList"><option value=""></option><option selected="selected" value="2f666645-9b28-406f-bd9f-9ecc009346a6">app1</option><option value="898cbbb5-5dff-4378-b15a-9ecc00b8242f">app2</option></select>
就像這樣(選擇的已經消失了:!):
<select class="required" id="applicationList" name="applicationList" rel="0"><option value=""></option><option value="2f666645-9b28-406f-bd9f-9ecc009346a6">app1</option><option value="898cbbb5-5dff-4378-b15a-9ecc00b8242f">app2</option></select>
誰能解釋我在這里做錯了什么以及為什么它會丟失所選值? 我發現了一些帖子 go 到視圖數據項的名稱如何不能沖突等,但我已經用隨機名稱將其剝離,似乎沒有任何效果? 這是 MVC3 中的問題嗎?
問題似乎是,當您將SelectList
作為參數傳遞給Html.DropDownList()
時,它不喜歡它與實際下拉列表具有相同的名稱。
我復制了你的代碼,遇到了和你一樣的問題。
但是一旦我改變
@Html.DropDownList("applicationList", ViewBag.applicationList as SelectList, "", new { rel = "0", @class = "required" })
至
@Html.DropDownList("applicationListX", ViewBag.applicationList as SelectList, "", new { rel = "0", @class = "required" })
它產生了工作 output:
<select class="required" id="applicationListX" name="applicationListX" rel="0"><option value=""></option>
<option selected="selected" value="2f666645-9b28-406f-bd9f-9ecc009346a6">app1</option>
<option value="898cbbb5-5dff-4378-b15a-9ecc00b8242f">app2</option>
</select>
我不知道為什么會這樣,但有你的解決方法。
經過幾天的修改並且不想更改 Select 列表的名稱(因為我不想在回發時破壞 model 的自動綁定), 本文末尾的替代解決方案向我展示了方法。 不要使用 ViewBag。 請改用 ViewData,其名稱與 model 字段的名稱相同,並且不要將任何其他內容傳遞給 DropDownList,或者將 null 作為第二個參數傳遞,以防您想要 Z4C4AD5FCA2E381CED0 的第三個參數(屬性)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.