【问题标题】:can a mvc custom html helper inherit a base helper?mvc 自定义 html 助手可以继承基本助手吗?
【发布时间】:2016-06-23 23:53:53
【问题描述】:

所以我希望能够在剃刀语法中将data- 属性添加到我的@HTML.Listbox html 帮助器。我的理解是,如果不创建自己的客户 html 助手,我就无法做到这一点。

我的问题是,有没有办法创建一个自定义的 html 帮助程序,但基本上从基础 @HTML.Listbox 继承所有内容,然后添加添加 data- 属性的能力?类似的东西已经存在了吗?

提前致谢!

【问题讨论】:

  • 是的,您可以创建自己的MyListBoxFor() 方法来调用内置的ListBoxFor() 方法并向htmlAttributes 参数添加其他值
  • 我对 C# 或 mvc 还不是很熟悉,您是否介意写一个示例来说明您的确切含义?
  • 不清楚你为什么需要这样做——为什么不直接使用@Html.ListBoxFor(m => m.someProperty, Model.Options, new { data_someName = "someValue" })
  • 哦,这样行吗?哈哈,我不会用那个,因为我不知道它存在
  • 当然——那会生成<select ..... data-somename="someValue">——只要确保你使用的是下划线,而不是连字符(它会被方法转换成连字符)

标签: c# asp.net-mvc razor html-helper


【解决方案1】:

所有用于生成表单控件的内置 HtmlHelper 方法都有重载,允许您添加 html 属性。

对于ListBoxFor() 方法,overloads are documented here。在你的情况下它的

@Html.ListBoxFor(m => m.someProperty, Model.Options, new { data_someName = "someValue" })

会生成

<select name="someProperty" id="someProperty" multiple="multiple" data-someName="someValue"> .... </select>

注意,添加包含连字符的属性时,必须在方法中使用下划线(该方法会在呈现的 html 中将其转换为连字符)。

您还可以创建自己的 HtmlHelper 扩展方法,这些方法可以生成更复杂的 html,包括自动添加固定属性,例如,您可以创建一个自动添加 class="form-control" 属性的 BootstrapTextBoxFor() 助手

public static MvcHtmlString BootstrapTextBoxFor<TModel, TValue>(this HtmlHelper<TModel> helper, 
Expression<Func<TModel, TValue>> expression, object htmlAttributes)
{
    IDictionary<string, object> attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
    attributes.Add("class", "form-control");
    ... other 'fixed' attributes as required
    return InputExtensions.TextBoxFor(helper, expression, attributes);
}

答案herehere 中显示了其他一些示例。

【讨论】:

    【解决方案2】:

    Razor 为您完成工作:

    @Html.AnythingHelperObject("NameOrId", new {data-yourcustomdatadom = "valueofdatadom"})
    

    【讨论】:

    • 好吧,我的意思是如何编写实际的AnythingHelperObject 以返回写入的 htmlstring :) 但是是的,剃刀石
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 2012-05-10
    • 2015-05-29
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多