我想使用Html.DropDownList(字符串名称,IEnumerable SelectList,Object htmlAttributes)为我呈现一个带有预选值的选择列表。
我的选择列表位于我视图的模型对象中,因此我一直在编写以下代码:
<%= Html.DropDownList("aName", mySelectList, new { }) %>
这将呈现没有预先选择的值的选择列表。
我找到的解决方法是将SelectList作为ViewData传递并执行以下操作:
在控制器中:
ViewData["TimeZones"] = mySelectList;
在视图中:
<%= Html.DropDownList("TimeZones", null, new { }) %>
这样选择列表将使用预选值进行渲染,但是,我不希望强制将选择列表作为视图数据传递。我究竟做错了什么?预先感谢您的帮助。
答案 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自动生成的代码是正确的,但如果您稍后手动添加字段,则很容易错过。