扩展MVC3 HTML Helpers以包含自定义HTML5属性

时间:2011-06-07 08:23:57

标签: asp.net-mvc asp.net-mvc-3 html-helper

我知道我可以使用匿名类型向任何给定助手添加自定义属性,并为其指定属性和值,将其呈现为HTML5属性,但是我希望在给定视图中实现相同的触发器外部指定的助手。类似于您从非突兀的JavaScript帮助程序中获得的相同功能,它在表单字段的属性的上下文中呈现验证规则。

有没有人知道是否有一种“简单”的方式将这些自定义注入帮助程序,还是我需要独立扩展每个帮助程序?

干杯

1 个答案:

答案 0 :(得分:1)

你不能从一个集中点扩展所有方法(通过使用额外的'htmlAttributes'参数添加重载来编写将扩展所有html辅助方法的代码 - 可能通过使用IL方法生成,但很难方式)。

每个扩展名都应该是你的html帮助器方法的重载,你可以在例子中实现:

public static class HtmlExtensions
{
    public static string MyPager(this HtmlHelper html, string parameter1, int parameter2)
    {
        var builder = new TagBuilder("div");
        GenerateMyPagerBody(builder , parameter1, parameter2); // insert body into tag
        return builder.ToString(TagRenderMode.SelfClosing);
    }

    public static string MyPager(this HtmlHelper html, string parameter1, int parameter2, object htmlAttributes)
    {
        var builder = new TagBuilder("div");
        GenerateMyPagerBody(builder , parameter1, parameter2);
        builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
        return builder.ToString(TagRenderMode.SelfClosing);
    }
}