我遇到了一个问题,无论如何尝试,asp.net和razor引擎都不能正确选择下拉列表中的元素。如果可用值之一是“0”,那么将始终选择该项目。
我想创建的是一个评分选择器,范围从-2到2,其中0是中间值,但不应预先选择。用户应被迫做出决定,因此默认值应为空。
使用类似下面代码所示的选项标签创建下拉列表不会保留默认为空。如果值为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项。
创建一个带有选定属性的空项
@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" })
创建一个空的项目对象,并将该对象设置为selectlist中选定的对象。
@{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?
我可以通过一些变通的方法来解决,但我宁愿不要......