在MVC 3中,虽然在Dropdown中渲染已选择的值但没有渲染选定的索引

时间:2013-07-03 02:48:37

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

我正在使用VB.NET和MVC 3应用程序。我试图渲染Dropdown多年。我在哪里有数据库,显示我的对象选择特定年份。我尝试了以下代码

Controller:
         Dim _years As New List(Of Service.Year)
                    _years = _Svc.GetYears()
                    Dim _yearList As IEnumerable(Of SelectListItem) = From c In _years Select New SelectListItem() With {.Text = c.YearMember, .Value = c.YearMember, .Selected = True}
                    ViewData("Year") = _yearList

In View : 
  Select Year :   <%: Html.DropDownList("Year", TryCast(ViewData("Year"), SelectList))%>   

这显示在下拉列表中选择的最后一个值。如果我删除.Selected = True它只是加载Drop with with Years条目,因为它在数据库的Year表中。假设年份列表是从1992年到2013年。我的对象有一年说1995年然后预期的是,在呈现数据时,下拉列表应该在1995年的选择中呈现。

1 个答案:

答案 0 :(得分:0)

将最后一项显示为选中的原因是因为您将每个项目的Selected标记设置为true,并且假设只能选择一个项目,则要渲染的最后一项是标记的项目如选中。

您必须执行类似

的操作
Dim _years As New List(Of Service.Year)
                    _years = _Svc.GetYears()
                    Dim _yearList As IEnumerable(Of SelectListItem) = From c In _years Select New SelectListItem() With {.Text = c.YearMember, .Value = c.YearMember, .Selected = c.YearMember == AVariableHere}
                    ViewData("Year") = _yearList

我的VB语法可能有些偏差,但想法是你只为符合你想要的条件的一个项目设置Selected = true,方法是将每个项目的YearMember属性与变量进行比较,或者传递给它确定是否应将该特定项目标记为已选择的方法。