在EditorFor模板中移动时,DropDownListFor不会绑定到值

时间:2015-05-01 15:24:11

标签: c# asp.net asp.net-mvc

我试图将此类内容转移到编辑器模板中:

<div class="field">
    @Html.ValidationMessageFor(x => x.CountryId)
    @Html.LabelFor(x => x.CountryId)
    @Html.DropDownListFor(x => x, Model.CountryOptions, "Please select")
</div>

Model.CountryOptions是预先填充的IEnumerable<SelectListItem>,并且在主模板中一切正常。

所以,我用以下内容替换上面的内容:

@Html.EditorFor(x => x.CountryId, "DropDownList", new { options = Model.CountryOptions, optionLabel = "Please select" })

在EditorTemplates / DropDownList.cshtml里面我有:

<div class="field">
    @Html.ValidationMessageFor(x => x)
    @Html.LabelFor(x => x)
    @Html.DropDownListFor(x => x, (IEnumerable<SelectListItem>)ViewData["options"], (string)ViewData["optionLabel"])
</div>

这一切看起来和以前一样,并且在发布时正确绑定到模型,但现在任何现有值都没有在初始加载时在下拉列表中标记为选中。

发生了什么?

2 个答案:

答案 0 :(得分:1)

我不知道这是一个错误还是仅仅是设计,但是当从编辑器模板调用 DropDownList 时,设置初始选定项目的唯一方法是设置< em>选择 SelectListItem 上的属性。

我建议的解决方法是,当您设置Model.CountryOptions时,请确保选中默认选项。

答案 1 :(得分:1)

在传递SelectList时,您必须显式设置所选对象,如下所示。如果您的CountryOption是一个列表,这应该工作。

@Html.EditorFor(x => x.CountryId, "DropDownList", new { options = new SelectList(Model.CountryOptions, Model.CountryID), optionLabel = "Please select" })