繁体   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