正如问题所言:
如何在DropDownListFor Html helper中设置selectedValue?

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

这些都无济于事:

@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()基于属性TipPopustaId的值(即模型绑定的工作方式)设置所选选项。在将模型传递到视图之前,请在控制器中设置其值,然后将选择正确的选项(绑定到模型属性时将忽略Selected属性的设置)

我是新来的,但仍在尝试愚蠢的事情。非常感谢您提醒我。

确定,当我看到它时将其作为答案。

您确定列表中2作为ID存在吗?

第一条评论是正确的答案。当使用TipPopustaId作为绑定名称进行模型绑定时,无论我如何编写(错误与否),都会忽略“ selectedValue”。所以我所有的尝试都是错误的。我只需要从控制器传递正确的值即可。

#1 楼

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

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

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


),才可以使用它,请注意,您可以检查源代码,尤其是SelectInternal()GetSelectListWithDefaultValue()查看详细信息的方法。

要在首次渲染视图时显示选定的选项,请在将模型传递给视图之前在GET方法中设置属性的值。 >
我还建议您的视图模型包含属性IEnumerable<SelectListItem> TipoviDepozita,并在控制器中生成SelectList

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


,这样视图将变为

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


评论


这让我开始思考...我可以以某种方式扩展SelectList / SelectListItem以便更轻松地插入数据属性吗?

–迪诺
17年1月19日在9:12

不,除非您重写源代码中的所有代码以创建自己的扩展方法以及SelectListItem和SelectList类(还有更多),否则不行。为什么您认为需要data- *属性?使用一些javascript会容易得多。

–user3559349
17年1月19日在9:16

好吧,有时候我需要在价格,积分或名称等选项中具有其他值,所以我选择了select而不是html.helper,但是我需要手动应用data-val- *属性来选择,这就是我认为这可能的原因拥有一些更清洁,更有效的方式来处理所有这些问题。

–迪诺
17年1月19日在9:33

如果您在视图中需要这些值,那么无论如何您都必须使用javascript(否则它们不应存在)。您可以将包含这些值的集合(作为模型的属性)传递给视图,将其分配给javascript数组,然后处理