在ASPNET.MVC中的SelectList中没有记住SelectedItem

时间:2009-07-30 14:40:56

标签: c# asp.net-mvc model-view-controller c#-3.0 selectlist

我有以下代码,用于填充带有一堆整数值的下拉列表,并使当前选定的值(在本例中为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(没有选择,所以显示第一个)

这是一个错误还是我在做一些非常愚蠢的事情?

由于

格雷姆

2 个答案:

答案 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”即可修复它!