1

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

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

谢谢

格雷姆

4

2 回答 2

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"] ) %>
于 2009-07-30T14:48:17.500 回答
0

这发生在我身上!我把头发拉了几个小时,但我最终弄明白了。就我而言,我正在创建一个这样的下拉列表:

<%= Html.DropDownList("bookId", Model.ProductMenu, new { onchange = "goToBook();" })%>

它没有打印选定的选项。但它旁边的下拉菜单工作正常:

<%= Html.DropDownList("segmentIndex", Model.SegmentMenu, new { onchange = "goToSegment();" })%>

它们在控制器中以完全相同的方式生成,并且调试器将始终在返回视图时显示正确选择的值。那么到底是什么?

不同之处在于视图本身。我的应用程序中的“bookId”恰好是一个路由/查询字符串值,而 segmentIndex 不是。只需将视图中的名称“bookId”更改为“bookIdBLAH”即可修复它!

于 2009-12-19T23:47:55.760 回答