如何将 Bootstrap 样式 class 应用到 HTML DropDownFor 并结合默认值

How do I apply BOTH Bootstrap styling class to an HTML DropDownFor combined with a default value

似乎没有支持此功能的重载。我目前正在使用 Overload 2

DropDownListFor(HtmlHelper, Expression>, IEnumerable, IDictionary)

这是我的电话

@Html.DropDownListFor(m => m.BandLeaderId, Model.BandLeaderList, Model.BandLeaderId)

我要补充:

new { @class = "form-control" }

第 3 次重载和第 6 次重载将采用 this 对象,但随后它们不包括 this、IDictionary 以设置默认值。

事后我是否必须使用 javascript 来设置样式?

根据斯蒂芬的评论编辑:

改为使用此表单:

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

由于您的控件绑定到 BandLeaderId,如 m => m.BandLeaderId,您在模型中设置的任何值都是此控件将使用的值。

我总是忘记 DropDownListFor 的这种细微差别,直到我尝试在我自己的项目中使用它,然后记住它并不像文档可能让您相信的那样工作。谢谢斯蒂芬!

原回答如下


您可能想要的重载是 this one:

public static MvcHtmlString DropDownListFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    IEnumerable<SelectListItem> selectList,
    object htmlAttributes
)

但是请注意,您要为 SelectList 提供默认值。如:

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField,
    object selectedValue
)

将其应用于您的情况:

@Html.DropDownListFor(m => m.BandLeaderId,
    new SelectList(Model.BandLeaderList, "BandLeaderId", "BandLeaderName", Model.BandLeaderId),
    new { @class = "form-control" })

我这里的假设是您的 Model.BandLeaderList 包含一个 IEnumerable,其属性为 BandLeaderIdBandLeaderName。如果 BandLeaderListDictionary 对象,请替换 KeyValue