Asp.net mvc 如何创建类似于HtmlHelper的自定义类并使用ViewContext初始化?

Asp.net mvc 如何创建类似于HtmlHelper的自定义类并使用ViewContext初始化?,asp.net-mvc,html-helper,viewcontext,Asp.net Mvc,Html Helper,Viewcontext,我们的项目使用了大量定制的HtmlHelper扩展方法,可在以下视图中引用: @Html.MyHelperMethod() 但是,我希望将它们与系统分开,并能够执行以下操作之一: @Html.MyApp.MyHelperMethod() @MyAppHtml.MyHelperMethod() 通过以下操作,我能够实现如下功能 @Html.MyApp().MyHelperMethod() 在MyApp()中,这看起来不像一个函数那么漂亮,哈哈。所以我开始做我自己的课程。我希望它能够像Html

我们的项目使用了大量定制的HtmlHelper扩展方法,可在以下视图中引用:

@Html.MyHelperMethod()
但是,我希望将它们与系统分开,并能够执行以下操作之一:

@Html.MyApp.MyHelperMethod()
@MyAppHtml.MyHelperMethod()
通过以下操作,我能够实现如下功能

@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),但这似乎是一个冗长的权衡。关于如何“分段”不使用函数的助手方法,还有其他想法吗


更新:感谢这里的答案,我发现了一个创建自定义HtmlHelper类的详细示例,如下所示:

您需要创建一个继承并添加自定义属性的类,然后更改所有视图以继承该类


您可以在Web.config中更改默认基类。

您需要创建一个继承并添加自定义属性的类,然后更改所有视图以继承该类


您可以在Web.config中更改默认基类。

我有一个框架,您可以按照如下方式进行操作

public MtWebViewPage<TModel> : WebViewPage
{
  public HtmlHelper<TModel> MyHtml {get;set;}
}
公共MtWebViewPage:WebViewPage { 公共HtmlHelper MyHtml{get;set;} }
我有一个框架,您可以按照以下步骤进行操作

public MtWebViewPage<TModel> : WebViewPage
{
  public HtmlHelper<TModel> MyHtml {get;set;}
}
公共MtWebViewPage:WebViewPage { 公共HtmlHelper MyHtml{get;set;} }
谢谢,这对我很有用。我找到了一个详细的指南和一个定制的HtmlHelper:。谢谢,这对我很有用。我找到了一个详细的指南和一个定制的HtmlHelper:。