我们的项目使用了很多自定义的 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