我们的项目使用了许多自定义的HtmlHelper扩展方法来在视图中引用,例如:
@Html.MyHelperMethod()
然而,我想把它们从系统中分离出来,并能够做以下任何一件事:
@Html.MyApp.MyHelperMethod()
@MyAppHtml.MyHelperMethod()
通过以下Razor HtmlHelpers与子节?我能够实现像
这样的东西@Html.MyApp().MyHelperMethod()
使用MyApp()作为函数,这看起来就不那么漂亮了,哈哈。所以我开始自己上课。我希望它能像HtmlHelper那样访问ViewContext:
public class MyHtmlHelper
{
public ViewContext ViewContext { get; private set; }
public MyHtmlHelper(ViewContext viewContext)
{
this.ViewContext = viewContext;
}
public MvcHtmlString MyHelperMethod()
{
//... Do something that accesses this.ViewContext
}
}
然而,我不知道继承和覆盖什么(ViewPage?),在哪里把MyHtmlHelper属性或在哪里初始化。我可以想到的另一种替代方法是创建一个BaseModel对象所有模型都从它继承并在其中添加MyHtmlHelper属性以便执行
@Model.MyAppHtml.MyHelperMethod()
这将要求每个控制器方法将上下文传递给模型对象(为了引用ViewContext),但这似乎是一个乏味的权衡。关于如何"分段"helper方法不使用函数的任何其他想法?
UPDATE:感谢这里的答案,我发现了一个详细的例子,创建一个自定义HtmlHelper类,像这样:
您需要创建一个继承WebViewPage
并添加自定义属性的类,然后更改所有视图以继承该类。
我有一个框架,你可以继续如下
public MtWebViewPage<TModel> : WebViewPage
{
public HtmlHelper<TModel> MyHtml {get;set;}
}