我想为我的MVC控制器嵌套一组扩展方法,我希望能够以下列模式调用
@Html.NestedName().CustomLabelFor(m => m.Field)
我注意到TwitterBootstrapMVC遵循这种模式,但我没有成功复制它..有人能告诉我一个如何构建我的扩展方法类的例子吗?
目前我的顶级课程如下
public static class BootstrapHtmlHelper
{
public static BootStrap Bootstrap(this HtmlHelper html)
{
return new BootStrap(html);
}
}
嵌套在Bootstrap类中我有以下方法
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());
}
显然这不再是静态的,但是我如何替换本来的“这个”以便我的方法仍然是一个功能?显然TModel和TProperty仍然是必需的,但我不确定如何将它们纳入范围?
答案 0 :(得分:3)
你几乎就在那里。让我们把它分成两部分:
BootstrapHtmlHelper
)。BootStrap
)所以,你只需要将第二种方法改为:
public MvcHtmlString CustomLabelFor<TProperty>(Expression<Func<TModel, TProperty>> expression, string placeholder)
此外,您需要修改BootStrap
以存储在扩展方法中传递的模型类型参数。因此,将BootStrap
声明为BootStrap<TModel>
并在创建新BootStrap
时将其传递(即new BootStrap<TModel>(html)
)。
现在您应该可以根据需要调用它:
@Html.Bootstrap().CustomLabelFor(m => m.Field)
(您有@Html.NestedName()
,但显然NestedName
应为Bootstrap
,因为这是您的扩展方法的名称,对吗?)