【问题标题】:HTML helper DropDownList explainedHTML 助手 DropDownList 解释
【发布时间】:2014-05-29 15:49:31
【问题描述】:

有人可以解释一下这是如何工作的吗? (正在使用哪个重载)

@Html.DropDownList("FinancialYearID", "Select FY")

FinancialYearID 是视图包中的 SelectList。为什么要作为字符串传递?

另外,如何在输入元素上添加自定义属性? 添加第三个参数

new { @class = "foo" } 

没有用?

是否可以使用默认助手添加 data- 属性?

谢谢

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    您正在调用 this 过载。这将创建一个下拉列表,其中 name“FinancialYearID”(这意味着所选值将绑定到名为“FinancialYearID”的模型或 ViewBag 属性)和“Select FY”作为占位符(空)选择文本。

    如果你想添加一个类,你需要DropDown(string, IEnumerable, string, object) helper:

    @Html.DropDownList("FinancialYearID", null, "Select FY", new { @class = "foo" })
    

    在这里,您还可以通过传入IEnumerable(例如SelectList)来填充DropDownList,而我已经通过null

    是的,完全可以传递数据属性。只需将连字符替换为下划线即可:

    @Html.DropDownListFor("FinancialYearID", null,
                       "Select FY", new { @data_something = "foo" })
    

    如果您尝试将所选值绑定到模型属性,则可以传递一个 Lamba 表达式来指示您要绑定的属性,并且框架将生成适当的 name

    @Html.DropDownList(m => m.FinancialYearID, MySelectList,
                       "Select FY", new { @data_something = "foo" })
    

    我通常还建议将 SelectList 放在模型中的初始 GET 请求中,而不是使用 ViewBag

    【讨论】:

      【解决方案2】:

      在您的示例中,您使用 DropDownList(this HtmlHelper htmlHelper, string name, string optionLabel)

      要获得你想要的效果,你应该使用下一个代码:

      @Html.DropDownListFor(model => model.FinancialYearID, (SelectList)ViewBag.FinancialYearID, "Select FY", new { @class = "foo" }) 
      

      (重载为DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel>, Expression<Func<TModel,TProperty>>, IEnumerable<SelectListItem>, string, object)

      或者,如果您的 SelectList 中的一个标记为选中,请使用下一个代码:

      @Html.DropDownListFor(model => model.FinancialYearID, (SelectList)ViewBag.FinancialYearID, new { @class = "foo" }) 
      

      (重载为DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel>, Expression<Func<TModel,TProperty>>, IEnumerable<SelectListItem>, object)

      附: 不要忘记将 ViewBag 项转换为 SelectList,因为编译器会认为第二个参数是对象。

      【讨论】:

      • 你能否解释一下第一个参数是如何工作的(lambda expr)。它向输入元素添加了什么?
      • 它将相同的 html 添加到页面中,作为您示例中的方法(输出名称/id 等于属性名称的选择列表),但您可以安全地重命名模型的属性并且不依赖没有特殊需要的魔术字符串。
      【解决方案3】:

      也许你可以使用下面的那个。对于传递数据属性,请使用下划线_,例如new {@data_myname=value}

      MSDN

       public static MvcHtmlString DropDownList(
          this HtmlHelper htmlHelper,
          string name,
          IEnumerable<SelectListItem> selectList,
          Object htmlAttributes
      )
      

      参数

      html助手

      输入:System.Web.Mvc.HtmlHelper 此方法扩展的 HTML 帮助程序实例。

      名字

      输入:System.String 要返回的表单字段的名称。

      选择列表

      输入:System.Collections.Generic.IEnumerable&lt;SelectListItem&gt; 用于填充下拉列表的 SelectListItem 对象的集合。

      html属性

      输入:System.Object 包含要为元素设置的 HTML 属性的对象。

      返回值

      输入:System.Web.Mvc.MvcHtmlString 一个 HTML 选择元素,列表中的每个项目都有一个选项子元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-17
        • 2023-04-05
        • 2016-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-16
        相关资源
        最近更新 更多