由于某些必要,我创建了自己的自定义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中,我需要进行一些布局文件查找,具体取决于
在主题上,它所做的与问题无关。
我的视图/共享/_ViewStart.cshtml看起来像这样(不相关的内容已删除):
@inherits MyNamespace.MyViewStart
@{
Layout = Themes.ThemeLayout;
}
因此,我们有一个自定义的ViewStart类,它是从标准ViewStartPage派生的。标准的_ViewStart.cshtml是ViewStartPage。新的_ViewStart.cshtml是MyViewStart页面,而该页面又是标准的ViewStartPage,因此继承中都包含了所有内容。
但是,当我运行该应用程序时,出现错误:
ViewStartPage只能与从WebViewPage或另一个ViewStartPage派生的页面一起使用
它由我的自定义视图起始类的构造函数中的“ Themes = new Helpers.ThemeHelper”行引发。因此,当我的自定义视图起始类是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/