我认为我有三个DropDownListFor
助手。他们三个都使用相同的List<SelectListItem>
作为'选项'参数。第一个和第三个DropDownListFor
包含来自我的模型的整数值,第二个DropDownListFor
包含来自我的模型的null
值。当然,我希望第二个下拉列表没有选择任何选项,然后回到默认的“请选择”选项。但这不会发生。每次我将null
值发送到第二个下拉列表时,它都会设置为与之前相同的选项(第一个)。
以下是我的简化代码:
<div class="form-group">
@Html.LabelFor(m => m.FirstId)
<div class="col-md-10">
@Html.DropDownListFor(m => m.FirstId, Model.SelectOptions, "Please select")
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.SecondId)
<div class="col-md-10">
@Html.DropDownListFor(m => m.SecondId, Model.SelectOptions, "Please select")
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.ThirdId)
<div class="col-md-10">
@Html.DropDownListFor(m => m.ThirdId, Model.SelectOptions, "Please select")
</div>
</div>
Id
s的唯一区别是第1和第3个是int
,第2个是可空的int
。任何想法为什么会发生这种情况?
编辑:
以下是我正在构建SelectOptions
:
model.SelectOptions.AddRange(db.SelectOptions.ToList().Select(option => new SelectListItem { Text = option.Name, Value = option.Id.ToString() }));
答案 0 :(得分:2)
由于您的视图代码通过三个下拉列表共享Model.SelectOptions
对象,因此列表中每个Selected
对象上的SelectListItem
属性可能会受到干扰。
在您的示例中,构建第一个下拉列表时,其值为SelectListItem
的{{1}}对象之一将设置为Model.FirstId
。在第二个下拉列表创建时,true
为空,Model.SecondId
列表中不存在,将继续选择带有Model.SelectOptions
的SelectListItem。然后是第三个下拉列表,因为Selected=True
具有列表中存在的值,Model.ThirdId
的{{1}}属性值将再次变为Selected
并被选中。
为了解决这个问题,我会将新的SelectList对象传递给每个DropDown:
SelectListItem
假设true
中的@Html.FropDownListFor(m => m.FirstId, new SelectList(Model.SelectOptions, "Value", "Text"), "Please Select")
@Html.FropDownListFor(m => m.SecondId, new SelectList(Model.SelectOptions, "Value", "Text"), "Please Select")
@Html.FropDownListFor(m => m.ThirdId, new SelectList(Model.SelectOptions, "Value", "Text"), "Please Select")
都没有设置为真。