关于asp.net mvc:MVC5-如何在DropDownListFor Html助手中设置“选定值”

MVC5 - How to set “selectedValue” in DropDownListFor Html helper

如问题所述:
如何在DropDownListFor HTML帮助程序中设置selectedValue?

尝试了其他大多数解决方案,但都没有成功,这就是为什么我要提出一个新问题。

这些都无济于事:

1
2
3
4
5
6
7
@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita,"Id","Naziv", 2), htmlAttributes: new { @class ="form-control" })

//Not working with or without cast
@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita,"Id","Naziv", (ProjectName.Models.TipDepozita)Model.TipoviDepozita.Single(x => x.Id == 2)), htmlAttributes: new { @class ="form-control" })
@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita,"Id","Naziv", (ProjectName.Models.TipDepozita)Model.TipoviDepozita.Where(x => x.Id == 2).FirstOrDefault()), htmlAttributes: new { @class ="form-control" })

@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita,"Id","Naziv", new SelectListItem() { Value="2", Selected=true}), htmlAttributes: new { @class ="form-control" })

如果可能的话,我想避免为列表手动创建SelectListItems或ViewModel。


当您使用DropDownListFor()(或DropDownList())方法绑定到模型属性时,其属性值将设置选定的选项。

在内部,这些方法生成自己的IEnumerable并根据属性的值设置Selected属性,因此在代码中设置Selected属性将被忽略。仅当您不绑定到模型属性时(例如,使用

1
@Html.DropDownList("NotAModelProperty", new SelectList(Model.TipoviDepozita,"Id","Naziv", 2))

请注意,您可以检查源代码,尤其是SelectInternal()GetSelectListWithDefaultValue()方法,以查看其详细工作方式。

若要在首次渲染视图时显示选定的选项,请在将模型传递给视图之前,在GET方法中设置属性的值

我还建议您的视图模型包含属性IEnumerable TipoviDepozita,并在控制器中生成SelectList

1
2
3
4
5
6
var model = new YourModel()
{
    TipoviDepozita = new SelectList(yourCollection,"Id","Naziv"),
    TipPopustaId = 2 // set the selected option
}
return View(model);

所以视图变成

1
@Html.DropDownListFor(m => m.TipPopustaId, Model.TipoviDepozita, new { @class ="form-control" })