2011-06-07 74 views
2

我知道我可以添加自定义属性给任何给定的助手使用匿名类型的属性和值指定为它呈现为HTML5属性,但我希望实现跨越给定视图中的所有HTML助手都由外部指定的助手触发。与您从非侵入式JavaScript助手中获得的相同功能类似,它在表单字段属性的上下文中呈现验证规则。扩展MVC3的HTML帮手包括自定义的HTML5属性

有谁知道是否有一种“简单”的方式将这些定制注入助手,还是我需要独立扩展每个助手?

干杯

+0

你可以给你想要的东西的一个具体的例子吗?您可以使用模板化Razor代表(http://haacked.com/archive/2011/02/27/templated-razor-delegates.aspx)。 – counsellorben 2011-06-07 16:47:09

+0

我们希望在客户端做一些工作,具体取决于表单的字段被更改。我们希望的方法是用原始字段的值添加一个自定义属性,然后onChange对新值和旧值进行比较。这意味着某人可以将字段返回到其原始状态并且不会被视为已更改。所以想法是,每个助手(文本框,选择输入等)将自动呈现属性。 – 2011-06-08 13:26:10

+0

而不是使用自定义属性,当文档准备就绪时,使用jQuery遍历每个字段并存储原始值会更容易。然后,您可以在字段更改时检查字段的原始值,并相应采取相应措施。 – counsellorben 2011-06-08 21:03:32

回答

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); 
    } 
}