项值为0的DropDownListFor始终处于选中状态

本文关键字:于选中 状态 DropDownListFor | 更新日期: 2023-09-27 18:27:36

我在让asp.net和razor引擎创建一个选择了正确元素的下拉列表时遇到了问题。无论我尝试什么,如果其中一个可用值为"0",该项目将始终被选中。

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

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

@Html.DropDownListFor(model => model.Rating, new SelectList(new List<SelectListItem>()
{
    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:

<select class="rating-select valid" data-val="true" data-val-number="The field Rating must be a number." data-val-required="Rating is required." id="Rating" name="Rating">
    <option value=""></option>
    <option value="-2">-2</option>
    <option value="-1">-1</option>
    <option selected="selected" value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
</select>

我尝试过所有选择空白值的版本,但结果都是一样的;0项是用选定的标记生成的。

使用Selected=true 创建空白项目

@Html.DropDownListFor(model => model.Rating, new SelectList(new List<SelectListItem>()
{
    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<SelectListItem>()
{
    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时,以上所有操作都不起作用。

有人知道合适的解决方案吗?或者这是否是框架中的一个bug?

我可以用变通方法破解它,但我宁愿不。。。

项值为0的DropDownListFor始终处于选中状态

我会看看模型的类型。Rating属性是,我假设它是int。如果这是(int)类型,并且您没有提供值,那么当它出现在视图中时,它将绑定到0。因此,在处理视图时,0将被标记为已选择,即视图引擎认为正确的值,并将覆盖手动选择的选定值。试着做这个模型。将属性评为可为null的int (int?),并查看是否存在相同的问题。

其次,您总是可以查看一个快速的jQuery函数,将下拉列表重置为第一个提供的值,但这可能比您想要的更"棘手"。

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