2011-06-07 58 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); 
    } 
}