HTML.DropDownList不遵循预先选择的值

时间:2009-12-20 10:22:13

标签: asp.net-mvc drop-down-menu

我想使用Html.DropDownList(字符串名称,IEnumerable SelectList,Object htmlAttributes)为我呈现一个带有预选值的选择列表。

我的选择列表位于我视图的模型对象中,因此我一直在编写以下代码:

<%= Html.DropDownList("aName", mySelectList, new { }) %>

这将呈现没有预先选择的值的选择列表。

我找到的解决方法是将SelectList作为ViewData传递并执行以下操作:

在控制器中:

ViewData["TimeZones"] = mySelectList;

在视图中:

<%= Html.DropDownList("TimeZones", null, new { }) %> 

这样选择列表将使用预选值进行渲染,但是,我不希望强制将选择列表作为视图数据传递。我究竟做错了什么?预先感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

你可以这样做(它有效):

<%: Html.DropDownList("DropdownName", new SelectList(ListItems, "Value", "Text", selectedItem), htmlAttributes)%>

如果这对你不起作用,请告诉我。

答案 1 :(得分:1)

自动绑定所选项目

另一种方法是自动绑定所选项,并将项列表作为参数传递给DropDownList辅助方法。

在控制器中,您执行与以前完全相同的操作,只是不要将任何项的Selected属性设置为true。然后,您还必须将要选择的项目的值放入视图模型中。

var model = new IndexViewModel()
            {
                ListItems = items,
                SelectedItem = 2
            };

最后在视图中,您使用了也接受selectList参数的重载:

<%= Html.DropDownList("SelectedItem", Model.ListItems) %>

HTML呈现的唯一区别在于,使用第一种方法,HTML select元素的名称为ListItems,第二种方法为SelectedItem

如果您要创建自己的列表,这些方法很好,但如果您收到外部方法的选项列表(例如从DB存储库中),它们就不是最佳解决方案。

看看这个link

答案 2 :(得分:0)

我知道这是一篇旧帖子,但我在MVC5中遇到了类似的问题。解决方案很简单,但我一直在努力,所以我想我会分享。

VS在视图中自动生成DropDownLists:

@Html.DropDownList("EpisodeTypeId", null, htmlAttributes: new { @class = "form-control" })

在控制器中,VS为“创建与编辑”自动生成ViewBag代码。

以下是来自create:

的代码
ViewBag.EpisodeTypeId = new SelectList(db.EpisodeTypes, "Id", "Name");

来自编辑:

ViewBag.EpisodeTypeId = new SelectList(db.EpisodeTypes, "Id", "Name", episode.EpisodeTypeId);

正如您所料,第四个论点对编辑很重要。如果将其遗漏,则不会在DropDown中预先选择该记录的数据库值。

VS自动生成的代码是正确的,但如果您稍后手动添加字段,则很容易错过。