C# MVC HTMLHelper的嵌套扩展方法

C# MVC HTMLHelper的嵌套扩展方法,c#,asp.net-mvc,html-helper,C#,Asp.net Mvc,Html Helper,我想为我的MVC控制器嵌套一组扩展方法,我希望能够在以下模式中调用 @Html.NestedName().CustomLabelFor(m => m.Field) 我注意到TwitterBootstrapMVC遵循这种模式,但我没有成功地复制它。。有人能给我举个例子,说明如何构造扩展方法类吗 目前我的顶级课程如下 public static class BootstrapHtmlHelper { public static BootStrap Bootstrap(this

我想为我的MVC控制器嵌套一组扩展方法,我希望能够在以下模式中调用

@Html.NestedName().CustomLabelFor(m => m.Field)
我注意到TwitterBootstrapMVC遵循这种模式,但我没有成功地复制它。。有人能给我举个例子,说明如何构造扩展方法类吗

目前我的顶级课程如下

    public static class BootstrapHtmlHelper
{
    public static BootStrap Bootstrap(this HtmlHelper html)
    {
        return new BootStrap(html);
    }
}
嵌套在引导类中,我有以下方法

        public static MvcHtmlString CustomLabelFor <TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, string placeholder)
    {
        StringBuilder sb = new StringBuilder();
        return new MvcHtmlString(sb.ToString());
    }
public static MvcHtmlString CustomLabelFor(此HtmlHelper html、表达式、字符串占位符)
{
StringBuilder sb=新的StringBuilder();
返回新的MvcHtmlString(sb.ToString());
}

很明显,这不再是静态的,但是我如何替换本来应该是“this”的内容,使我的方法成为一个静态函数呢?显然,TModel和TProperty仍然是必需的,但我不确定如何将它们纳入范围?

您就快到了。让我们将其分为两部分:

  • 您需要一个静态类来容纳扩展方法(
    BootstrapHtmlHelper
  • 您需要一个非静态类来容纳实例方法(
    BootStrap
  • 因此,您只需将第二种方法更改为:

    public MvcHtmlString CustomLabelFor<TProperty>(Expression<Func<TModel, TProperty>> expression, string placeholder)
    

    (你有
    @Html.NestedName()
    ,但显然
    NestedName
    应该是
    Bootstrap
    ,因为这是你扩展方法的名称,对吧?

    是的,这解决了我的问题,但阻止了我正确地传递帮助程序,我会更新我的问题。我做到了,我现在的位置:)很好,谢谢。。实际上,我还必须做一件事,因为我不喜欢将Html值传递给封闭的方法,我通过将其存储在Bootstrap类中,作为方法中引用的属性来实现这一点。非常感谢你的帮助!我对方法类上的标记感到非常困惑。此主题的名称是什么?它被称为(或参数化类型,或模板)。一开始很奇怪,但正如您所看到的,它非常强大,可以让您编写一些非常棒的API方法
    @Html.Bootstrap().CustomLabelFor(m => m.Field)