我试图将此类内容转移到编辑器模板中:
<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>
这一切看起来和以前一样,并且在发布时正确绑定到模型,但现在任何现有值都没有在初始加载时在下拉列表中标记为选中。
发生了什么?
答案 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" })