1

我们的项目使用了很多自定义的 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),但这似乎是一个乏味的权衡。关于如何“分段”不使用函数的辅助方法的任何其他想法?

更新:感谢这里的答案,我找到了一个创建自定义 HtmlHelper 类的详细示例,如下所示:Changing Base Type Of A Razor View

4

2 回答 2

1

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

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

于 2013-05-01T15:31:13.843 回答
0

我有骨架你可以如何进行如下

public MtWebViewPage<TModel> : WebViewPage
{
  public HtmlHelper<TModel> MyHtml {get;set;}
}
于 2013-05-01T17:58:48.770 回答