我有以下代码行:
@Html.DropDownListFor(x => x.TimeOption, new SelectList(Model.TimeOptions, "Value", "Name", (int)Model.TimeOption))
Run Code Online (Sandbox Code Playgroud)
正确构建了下拉列表,并且选择确实是正确的但MVC不会在选择了正确的项目的情况下绘制下拉列表.标记不会在选项上输出选定的属性.
输出呈现为:
<option value="0">Past Day</option>
<option value="1">Past Week</option>
<option value="2">Past Month</option>
<option value="3">Past Year</option>
<option value="4">Start of Time</option>
Run Code Online (Sandbox Code Playgroud)
然而,如果您查看附加的屏幕截图,您可以看到它已正确选择:

这仅影响GET,而不影响POST.想法?
Jim*_*iTh 22
这往往会让人们陷入困境 - 显然MVC 5的路线图包含更直观的DropDownList助手.
当你这样做时:
@Html.DropDownListFor(x => x.TimeOption ...)
Run Code Online (Sandbox Code Playgroud)
...的HTML帮助将尽其一切力量不使用你的值设置为Selected = true你的SelectList.它会:
ModelState- 它不会得到GET请求ViewData-它会得到的,因为你有TimeOption你的模型属性.只有当这两个尝试都失败时,它才会屈服,并使用你要求它使用的东西.
因此,在您的情况下,它将使用TimeOption模型上的当前值作为选定值.哪个应该没问题,因为这就是你在SelectList反正中所要求的(int)Model.TimeOption,对吧?
错误.因为它不会像你一样投射你的财产(enum?)int.它会将其转换为字符串.对于一个enum产生枚举的名称 - 例如PastMonth.如果TimeOption是你的自定义类,那将是结果ToString().
然后,当它没有找到该字符串作为您的一个<select>值(因为它们都是整数)时,它决定不进行任何选择.
简而言之:SelectListItem.Selected对帮助者没有影响.如果你的助手调用指定一个名称(无论是从字面上或通过lambda表达式),助手将使用任何ModelState或ViewData使用该名称,并将其转换为字符串.
在大多数情况下,这会发生在枚举中.解决它的最简单方法是使用枚举的名称而不是其int表示作为的值SelectListItem.
| 归档时间: |
|
| 查看次数: |
5235 次 |
| 最近记录: |