簡體   English   中英

MVC 3 Dropdown 使用 ViewBag 丟失所選值

[英]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.

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