【问题标题】:Adding a css class to select using @Html.DropDownList()使用 @Html.DropDownList() 添加要选择的 css 类
【发布时间】:2011-11-14 02:31:02
【问题描述】:

我正在构建我的第一个 MVC 应用程序,因为我做了多年的 web 表单,但由于某种原因我无法完成这项工作:

@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) 有一些无效参数

非常感谢任何帮助!

【问题讨论】:

  • 您没有使用采用这些参数的重载。请参阅documentation

标签: asp.net-mvc razor


【解决方案1】:

正如错误消息中的签名所暗示的那样,第二个参数必须是 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"})

也许本教程可以提供帮助:How to create a DropDownList with ASP.NET MVC

【讨论】:

  • 感谢 Laurent 的回复,很遗憾我仍然遇到问题。使用您的代码行,我收到以下错误: System.Web.Mvc.SelectList' 不包含采用 0 个参数的构造函数 此行有效,我得到了选择标记,但我只想添加一个 css 类:@Html .DropDownList("PriorityID", String.Empty)
  • 你说得对,我已经改成new List&lt;SelectListItem&gt;()。 SelectList 实际上是一个帮助类,可帮助您从不同的对象列表中创建选择列表。请参阅我添加到帖子中的教程。
  • 谢谢,这确实有效,但是使用重载#2(字符串名称,字符串 optionLabel)我的下拉列表会自动填充优先级表中的记录。这正是我想要的,我只需要添加 css 类 - 但似乎没有允许这样做的重载?!
【解决方案2】:

查看控制器,并进一步了解 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" })

【讨论】:

  • 谢谢。对我帮助很大
  • 我正在使用您的解决方案(我的视图也是自动生成的),但是在编辑视图中时,我丢失了我选择的值,您能帮帮我吗? @Html.DropDownList("StateGroupID", (IEnumerable)ViewBag.StateGroupID, String.Empty, new { @class= "form-control" })
  • @Willy,我不是 100% 确定您所说的“丢失我选择的值”是什么意思——您的意思是选择的值没有正确地发布到服务器吗?请查看我的编辑以获取可能的解决方案...
  • 当我编辑记录时,下拉列表为空,它应该绑定到一个值。我通过在第二个参数 @Html.DropDownList("StateGroupID", null, String.Empty, new { @class= "form-control" }) 处传递空值找到了解决方案
  • 没关系。但是如果你想要一个像-select-这样的默认值,那么你需要修改它必须像@Html.DropDownList("PriorityID", (IEnumerable&lt;SelectListItem&gt;)ViewBag.PriorityID, String.Empty, new { @class="dropdown" })
【解决方案3】:

你可以使用 jQuery 来做到这一点

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

这里,选择is-html标签, 表单控件是类名

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

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

【讨论】:

    【解决方案4】:

    如果您在 Asp.Net MVC 中添加的参数不止 ya 下拉列表。 当您在视图包中编辑记录或传递值时。

    使用它会起作用:-

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

    【讨论】:

    • 你成就了我的一天@mohita
    【解决方案5】:

    试试这个

     @Html.DropDownList("Id", null, new { @class = "ct-js-select ct-select-lg" })
    

    【讨论】:

      【解决方案6】:

      你可以这样做:

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

      【讨论】:

        【解决方案7】:

        试试下面的代码:

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

        【讨论】:

          【解决方案8】:

          试试这个:

          @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!虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
          • 花点时间阅读帮助中心的editing help。 Stack Overflow 上的格式与其他网站不同。
          【解决方案9】:

          试试这个

          @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" })
          

          【讨论】:

            【解决方案10】:

            在构造函数看有一些选项, 如果你没有 dropdownList 并且你想插入 CSS 类,你可以像这样使用

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

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

            【讨论】:

              猜你喜欢
              • 2010-09-23
              • 1970-01-01
              • 2020-08-19
              • 2016-10-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-12-29
              相关资源
              最近更新 更多