2012-01-12 98 views
2

我想组我的HTML帮助,这样我可以在我看来简单的东西,因为这写:的MVC3 - 组HTML辅助扩展

@Html.SubGroup.MyCustomHelper("Hellow World") 

代替:

@Html.MyCustomHelper("Hellow World") 

看来,我无法在我为所有帮助者使用的HtmlExtensions类中嵌套静态类。

任何建议?

回答

3

你不能这样做@Html.SubGroup.MyCustomHelper("..."),因为没有“扩展属性”这样的东西,并且你不能控制静态类HtmlHelper

但你可能@Html.SubGroup().MyCustomHelper("...")与作为扩展方法的额外parens。

public static class MyHtmlHelpers 
{ 
    public static MyHelpers SubGroup(this HtmlHelper helper) 
    { 
     return new MyHelpers(helper); 
    } 
} 

public class MyHelpers 
{ 
    public HtmlHelper Helper { get; private set; } 

    public MyHelpers(HtmlHelper helper) 
    { 
     this.Helper = helper; 
    } 

    public MvcHtmlString MyCustomHelper(string someArgument) 
    { 
     return MvcHtmlString.Create(someArgument); 
    } 
} 
+0

我将不胜感激这样的实现的一个例子 – Dmitry 2012-01-12 20:21:02

+0

好吧,我添加了一个平凡(未经测试!)的例子。 – 2012-01-12 20:44:06

+1

这正是我为我的项目所做的。我有像'Html.UITemplates()。TextBox(...)'这样的方法,它会自动添加所有常见的CSS类,创建适当的标签并呈现文本框。它还允许某些常用功能的可链接性:'Html.UITemplates()。ValidateRequired()。MaxLength(50).TextBox(...)'。它工作得很好,我肯定会推荐它! – 2012-01-12 20:52:57