当我没有设置值时,Razor DropDownListFor设置选定的值

时间:2014-11-21 19:54:12

标签: asp.net-mvc razor

我认为我有三个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() }));

1 个答案:

答案 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") 都没有设置为真。