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的问题吗?

MVC 3下拉丢失选定值与ViewBag

问题似乎是,当您将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属性的第三个参数(我做了)。