如何创建一个类似于HtmlHelper的自定义类,并用ViewContext进行初始化



我们的项目使用了许多自定义的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并添加自定义属性的类,然后更改所有视图以继承该类。

你可以在Web.config中修改默认的基类。

我有一个框架,你可以继续如下

public MtWebViewPage<TModel> : WebViewPage
{
  public HtmlHelper<TModel> MyHtml {get;set;}
}

相关内容

  • 没有找到相关文章

最新更新