我有以下代码,用于填充带有一堆整数值的下拉列表,并使当前选定的值(在本例中为13)成为所选项。
我使用了相同的技术但是对于字符串值并且它工作得很好,每当我到达视图时记住当前值是什么。
在控制器中:
var x = new[] { 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
ViewData["Field"] = new SelectList(x, 13);
在视图中:
<%=Html.DropDownList("Field", (IEnumerable<SelectListItem>)ViewData["Field"])%>
当我调试并观察ViewData [“Field”]对象时,它的selectedValue值为13,因此它必须到达View但在那里被忽略,因为我在页面上看到的只是一个值为1的下拉列表到15,但显示1(没有选择,所以显示第一个)
这是一个错误还是我在做一些非常愚蠢的事情?
由于
格雷姆
答案 0 :(得分:4)
我似乎记得它实际上并没有使用SelectList元素的Selected属性。我通常有一个ViewData项目是选择列表,另一个是选定的值。
控制器:
var x = new[] { 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
ViewData["Fields"] = new SelectList(x);
ViewData["Field"] = 13;
查看
<%= Html.DropDownList("Field", (IEnumerable<SelectListItem>)ViewData["Fields"] ) %>
答案 1 :(得分:0)
发生在我身上!我把头发拉了几个小时,但最终我发现了。就我而言,我正在创建一个这样的下拉列表:
<%= Html.DropDownList("bookId", Model.ProductMenu, new { onchange = "goToBook();" })%>
并未打印所选选项。但是它旁边的下拉工作正常:
<%= Html.DropDownList("segmentIndex", Model.SegmentMenu, new { onchange = "goToSegment();" })%>
它们在控制器中以完全相同的方式生成,并且调试器将始终在返回视图时显示正确选择的值。那到底是什么?
区别在于视图本身。我的应用程序中的“bookId”恰好是路由/查询字符串值,而segmentIndex则不是。只需将视图中的名称“bookId”更改为“bookIdBLAH”即可修复它!