16

我发现了许多与此问题相关的问题和答案,但对我没有任何帮助

我正在创建一个这样的下拉列表

@Html.DropDownListFor(m => m.SchoolYears, new SelectList(Model.SchoolYears, "YearId", "StartDates", Model.CurrentYearId), new { @class = "field_Dropdown", style = "width:100px;",onchange="return searchStudents();" })

Model.CurrentYearId是类型int

但它永远不会让当前年份被选中。

从这篇文章中,我知道我们应该使用字符串作为选定值(虽然我不知道为什么,因为它允许对象作为选定值)

DropDownList SelectList SelectedValue 问题

所以我尝试了所有这些变化

new SelectList(Model.SchoolYears, "YearId", "StartDates", Model.CurrentYearId.ToString())

new SelectList(Model.SchoolYears, "YearId", "StartDates", 2)

new SelectList(Model.SchoolYears, "YearId", "StartDates", "2")

但他们甚至没有工作。

有办法通过 linq 查询或 foreach 循环创建选择列表并标记每个项目的选定属性,但为什么上述方法不起作用?

4

2 回答 2

24

发现了问题。

我正在做的错误是使用这个

m => m.SchoolYears // m.SchoolYears in a list of string

当我把它改成这个

m => m.SelectedYearId // m.SelectedYearId is an integer property

它就像一个魅力,所以最后我有这个工作

@Html.DropDownListFor(m => m.SelectedYearId, new SelectList(Model.SchoolYears, "YearId", "StartDates", Model.CurrentYearId), new { @class = "field_Dropdown", style = "width:100px;",onchange="return searchStudents();" })

谢谢!

于 2013-05-17T08:16:27.610 回答
8

该解决方案对我不起作用。事实证明,如果 ViewBag 属性名称和模型属性名称相同,则所选属性不起作用,因此在更改 ViewBag 属性名称后它起作用了。

于 2017-10-08T19:41:56.083 回答