Asp.net mvc 选定值不适用于SelectList

Asp.net mvc 选定值不适用于SelectList,asp.net-mvc,html.dropdownlistfor,selectlist,Asp.net Mvc,Html.dropdownlistfor,Selectlist,我发现了许多与这个问题相关的问题和答案,但对我来说没有任何效果 我正在创建一个这样的下拉列表 @Html.DropDownListFor(m => m.SchoolYears, new SelectList(Model.SchoolYears, "YearId", "StartDates", Model.CurrentYearId), new { @class = "field_Dropdown", style = "width:100px;",onchange="return searc

我发现了许多与这个问题相关的问题和答案,但对我来说没有任何效果

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

@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

但它从不让今年被选中

从这篇文章中,我知道我们应该使用字符串来表示所选的值(尽管我不知道为什么,因为它允许对象表示所选的值)

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

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循环创建选择列表,并标记每个项目的选定属性,但为什么上述方法不起作用?

发现了问题

我犯的错误就是用这个

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();" })

谢谢

这个解决方案对我不起作用。如果ViewBag属性名称和Model属性名称相同,则所选属性不起作用,因此在更改ViewBag属性名称后,它起作用了。

如果需要字符串ID,我该怎么办?我使用MVC5,但仍然遇到相同的问题我也是如此。需要注意的是:它不区分大小写
ViewBag.myvariablename
也会影响到
@Html.DropDownListFor(m=>m.myvariablename,…)