mvc自定义html帮助器可以继承一个基本帮助器吗?

时间:2016-06-23 23:53:53

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

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

我的问题是,有没有办法创建一个自定义的html帮助器,但基本上继承了基础@HTML.Listbox中的所有内容,然后只添加添加data-属性的功能?有什么比较已经存在吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

Razor为你做的工作:

JSON

答案 1 :(得分:0)

用于生成表单控件的所有内置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,包括自动添加固定属性,例如,您可以创建一个BootstrapTextBoxFor()帮助程序,自动添加class="form-control"属性

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中。