由于某些需要,我创建了自己的自定义 View Start,如下所示:
public abstract class MyViewStart : System.Web.Mvc.ViewStartPage {
public My.Helpers.ThemeHelper Themes { get; private set; }
public MyViewStart() : base() {
Themes = new Helpers.ThemeHelper(base.ViewContext)
}
}
需要的是,在 _ViewStart 中我需要做一些布局文件查找,这取决于 在主题上,它所做的与问题无关。
My Views/Shared/_ViewStart.cshtml 看起来像这样(删除了不相关的内容):
@inherits MyNamespace.MyViewStart
@{
Layout = Themes.ThemeLayout;
}
因此,我们有一个派生自标准 ViewStartPage 的自定义 ViewStart 类。标准的 _ViewStart.cshtml 是一个 ViewStartPage。新的 _ViewStart.cshtml 是一个 MyViewStart 页面,它又是一个标准的 ViewStartPage,因此所有内容都包含在继承中。
但是,当我运行应用程序时出现错误:
ViewStartPage 只能与派生自 WebViewPage 或另一个 ViewStartPage 的页面一起使用
这是由我的自定义 View 启动类的构造函数中的“Themes = new Helpers.ThemeHelper”行抛出的。那么,当我的自定义 View 启动类是 ViewStartPage 的子级时,为什么会抛出该异常???
最佳答案
您无法在构造函数中访问 ViewContext,但如果您覆盖 ExecutePageHierarchy,则可以在那里进行。我这样修改了您的代码以使其工作:
public abstract class MyViewStart : System.Web.Mvc.ViewStartPage {
public My.Helpers.ThemeHelper Themes { get; private set; }
public override void ExecutePageHierarchy()
{
this.Themes = new Helpers.ThemeHelper(this.ViewContext);
base.ExecutePageHierarchy();
}
}
关于c# - ViewStartPage 只能与派生自 WebViewPage 或另一个 ViewStartPage 的页面一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10872649/