我在使用asp.net和razor引擎创建一个选择了正确元素的下拉列表时遇到问题。无论我尝试什么,如果其中一个值为“0”,则始终会选择该项目。
我想要创建的是一个选择,评级范围从-2到2,其中0是中间值,但不应预先选择。应强制用户做出决定,因此defualt值应为空。
使用选项标签创建下拉列表,如下面的代码所示,不会将默认值保留为空。例如,如果值为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时,上述任何一项都无效。
有没有人知道正确的解决方案,或者这是否是框架中的错误?
我可以通过解决方法来解决它,但我宁愿不......
答案 0 :(得分:5)
我会看看model.Rating属性的类型是什么,我假设它是一个int。如果这是(int)
类型并且您没有提供值,则当它出现在视图中时它将被绑定为0。因此,处理视图时,0将被标记为已选择,即视图引擎认为正确的值,并将覆盖您手动选择的选定值。尝试制作model.Rating属性可以为空(int?)
,看看你是否有同样的问题。
其次,您可以随时查看快速jQuery函数,将下拉列表重置为第一个提供的值,但这可能比您正在寻找的更“hacky”。
答案 1 :(得分:2)
解决方案是避免项目的值为0,因为Rating
是int
(默认值等于0
),或者,使用{自己处理DropdownList的绑定{1}}而是。如果选择后者,则还必须为用户在绑定时选择的项目指定Html.DropDownList
。