MVC 3下拉丢失选定值与ViewBag
本文关键字:ViewBag 3下 MVC | 更新日期: 2023-09-27 17:54:03
我有一个问题与下拉菜单和viewbag。我在控制器中使用以下代码设置下拉菜单:
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" })
但是由于某种原因,所选择的值没有呈现(即使它被传递给视图,我可以在ViewBag SelectList中看到selected = "true"对正确的项)。
上面的两个例子呈现为(这个有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>
谁能解释我在这里做错了什么,为什么它失去了选定的值?我发现了一些帖子,进入视图数据项的名称不能冲突等,但我已经剥离了这个权利与随机名称,似乎没有工作!这是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" })
产生工作输出:
<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 List的名称(因为我不想破坏模型的自动绑定),本文末尾的替代解决方案向我展示了方法。不要使用ViewBag。使用ViewData代替,与模型字段的名称相同的名称,或者不传递任何其他到DropDownList,或者传递null作为第二个参数,以防你想要HTML属性的第三个参数(我做了)。