添加一个CSS类以使用@ Html.DropDownList()进行选择


76

经过多年的网络表单建设,我正在构建我的第一个MVC应用程序,由于某种原因,我无法完成这项工作:

@Html.DropDownList("PriorityID", String.Empty, new {@class="textbox"} )

错误信息:

System.Web.Mvc.HtmlHelper<SPDR.Models.Bug>'不包含的定义 DropDownList最佳扩展方法重载System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper, string, System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>, object)包含一些无效的参数

任何帮助,不胜感激!


您没有使用带有这些参数的重载。请参阅文档
vcsjones

Answers:


104

查看控制器,并多讲一些MVC的实际工作原理,我能够理解这一点。

我的视图是自动生成的视图之一,并包含以下代码行:

@Html.DropDownList("PriorityID", string.Empty)

要添加html属性,我需要执行以下操作:

@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID, new { @class="dropdown" })

再次感谢@Laurent的帮助,我意识到问题并没有那么清晰。

更新:

更好的方法是在可能的地方使用DropDownListFor,这样您就不必依赖于魔术字符串作为name属性。

@Html.DropDownListFor(x => x.PriorityID, (IEnumerable<SelectListItem>)ViewBag.PriorityID, new { @class = "dropdown" })

谢谢。它帮了我很多
扎米尔

4
我正在使用您的解决方案(我的视图也是自动生成的),但是在编辑视图中,我丢失了所选的值,您能帮我吗?@ Html.DropDownList(“ StateGroupID”,(IEnumerable <SelectListItem>)ViewBag.StateGroupID,String.Empty,new {@class =“ form-control”})
Willy

@Willy,我不确定100%“丢失我的所选值”是什么意思-您是不是将所选值未正确发布到服务器?请查看我的编辑以寻求可能的解决方案...
Lee Bailey 2014年

2
当我编辑记录时,dropdownlist为空,应将其绑定到一个值。我通过在第二个参数@ Html.DropDownList(“ StateGroupID”,null,String.Empty,new {@class =“ form-control”})中传递空值来找到解决方案
Willy

1
没关系。但是,如果您想要一个-select-与列表一样的默认值,则需要修改它,就像@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID, String.Empty, new { @class="dropdown" })
gdmanandamohon

40

如错误消息中的签名所示,第二个参数必须是IEnumerable,更具体地说是SelectListItem的IEnumerable。这是选择的列表。您可以使用SelectList类型,它是SelectListItem的IEnumerable。对于没有选择的列表:

@Html.DropDownList("PriorityID", new List<SelectListItem>(), new {@class="textbox"} )

有关选择的列表:

@Html.DropDownList(
    "PriorityID", 
    new List<SelectListItem> 
    { 
        new SelectListItem { Text = "High", Value = 1 }, 
        new SelectListItem { Text = "Low",  Value = 0 },
    }, 
    new {@class="textbox"})

也许本教程会有所帮助:如何使用ASP.NET MVC创建DropDownList


感谢洛朗的回复,很遗憾,我仍然遇到问题。使用您的代码行,我得到以下错误:System.Web.Mvc.SelectList'不包含带有0个参数的构造函数。这行有效,我获得了select标记,但我只想添加一个CSS类:@Html .DropDownList(“ PriorityID”,String.Empty)
Lee Bailey

您是对的,我已更改为new List<SelectListItem>()。SelectList实际上是一个帮助程序类,可帮助您从不同的对象列表中创建选择列表。请参阅我添加到帖子中的教程。
Laurent le Beau-Martin

谢谢,确实可以,但是使用#2重载(字符串名称,字符串optionLabel),我的下拉列表会自动填充优先级表中的记录。那正是我想要的,我只需要添加css类-但似乎没有允许它的重载?
李·贝利

19

如果要在Asp.Net MVC中添加多个参数ya下拉列表。当您在记录袋中编辑记录或传递值时。

使用它会起作用:-

@Html.DropDownList("CurrencyID",null,String.Empty, new { @class = "form-control-mandatory" })

你让我开心@mohita
穆罕默德·

8

构造函数外观中有一些选项,如果您没有dropdownList,并且想要插入CSS类,则可以像

@Html.DropDownList("Country", null, "Choose-Category", new {@class="form-control"})

在这种情况下,Country是下拉列表的名称,null是因为您没有从控制器中传递任何通用列表,因此选择了“ Choose-Category”,如果不想选择任何默认选项,则在CSS类中选择最后一个简单地用“”替换“选择类别”


6

您可以使用jQuery完成

  $("select").addClass("form-control")

在这里,选择is- html标记,Form-control is-类名

 @Html.DropDownList("SupplierId", "Select Supplier")

在这里,SupplierId是ViewBagList,选择供应商是-显示名称


4

只需尝试一下

@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID,  new { @class="dropdown" })

但是,如果您要使用默认值或不使用任何选项值,则必须尝试使用​​此选项,因为String.Empty它将为您选择没有值,它将-select-用作默认选项

@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID, String.Empty, new { @class="dropdown" })


1

试试这个:

@Html.DropDownList(
    "country", 
    new[] {
        new SelectListItem() { Value = "IN", Text = "India" },
        new SelectListItem() { Value = "US", Text = "United States" }
    }, 
    "Country",
    new { @class = "form-control",@selected = Model.Country}
)

欢迎使用Stack Overflow!尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。也请尽量不要在代码中加入解释性注释,这会降低代码和解释的可读性!
Rizier123 '16

花点时间通读帮助中心中的编辑帮助。堆栈溢出上的格式与其他站点不同。
Rizier123 '16

0

您可以简单地做到这一点:

@Html.DropDownList("PriorityID", null, new { @class="form-control"})

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.