始终选择项值为0的DropDownListFor

我有一个问题,让asp.net和剃刀引擎创建一个选择了正确元素的下拉列表。 无论我尝试什么,如果其中一个值为“0”,将始终选择该项目。

我想要创建的是一个选择从-2到2的评级,0是中间值,但不应该预先选择。 应强制用户做出决定,因此defualt值应为空。

使用选项标签创建下拉列表,如下面的代码所示,不会将默认值保留为空。 例如,如果值为1-5,则这将起作用。

@Html.DropDownListFor(model => model.Rating, new SelectList(new List() { new SelectListItem() {Text = "-2", Value = "-2"}, new SelectListItem() {Text = "-1", Value = "-1"}, new SelectListItem() {Text = "0", Value = "0"}, new SelectListItem() {Text = "1", Value = "1"}, new SelectListItem() {Text = "2", Value = "2"} }, "Value", "Text"), String.Empty, new { @class = "rating-select" }) 

上面的代码将选定的标记添加到0项并创建以下html:

   -2 -1 0 1 2  

我已经尝试过选择空白值的所有版本,但所有版本都相同; 使用选定的标签生成0项。

使用Selected = true创建空白项目

 @Html.DropDownListFor(model => model.Rating, new SelectList(new List() { new SelectListItem() {Text = "Null", Value = "", Selected = True}, new SelectListItem() {Text = "-2", Value = "-2"}, new SelectListItem() {Text = "-1", Value = "-1"}, new SelectListItem() {Text = "0", Value = "0"}, new SelectListItem() {Text = "1", Value = "1"}, new SelectListItem() {Text = "2", Value = "2"} }, "Value", "Text"), String.Empty, new { @class = "rating-select" }) 

创建空白项目对象并将对象设置为选择列表中的选定对象

 @{SelectListItem blankItem = new SelectListItem() {Text = "Null", Value = ""}} @Html.DropDownListFor(model => model.Rating, new SelectList(new List() { blankItem, new SelectListItem() {Text = "-2", Value = "-2"}, new SelectListItem() {Text = "-1", Value = "-1"}, new SelectListItem() {Text = "0", Value = "0"}, new SelectListItem() {Text = "1", Value = "1"}, new SelectListItem() {Text = "2", Value = "2"} }, "Value", "Text", blankItem), String.Empty, new { @class = "rating-select" }) 

当其中一个值为0时,以上都不起作用。

有没有人知道一个正确的解决方案,或者这是否是框架中的错误?

我可以通过解决方法来解决它,但我宁愿不……

我会看看model.Rating属性的类型是什么,我假设它是一个int。 如果这是一个(int)类型而你没有提供一个值,那么当它遇到一个视图时它将被绑定为0。 因此,处理视图时,0将被标记为已选择,即视图引擎认为正确的值,并将覆盖您手动选择的选定值。 尝试制作model.Rating属性是一个可以为空的int (int?) ,看看你是否有同样的问题。

其次,你总是可以查看一个快速的jQuery函数来将下拉列表重置为第一个提供的值,但这可能比你想要的更加“hacky”。

解决方案是避免项目的值为0,因为Rating是一个int (默认值等于0 ),或者,通过使用Html.DropDownList来自己处理DropdownList的绑定。 如果选择后者,则还必须为用户在绑定时选择的项目指定Selected已选择”。