3

由于某些需要,我创建了自己的自定义视图开始,如下所示:

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 中我需要做一些取决于主题的布局文件查找,它所做的与问题无关。

我的 Views/Shared/_ViewStart.cshtml 看起来像这样(删除了不相关的东西):

@inherits MyNamespace.MyViewStart
@{
    Layout = Themes.ThemeLayout;
}

因此,我们有一个派生自标准 ViewStartPage 的自定义 ViewStart 类。标准的 _ViewStart.cshtml 是一个 ViewStartPage。新的 _ViewStart.cshtml 是一个 MyViewStart 页面,它又是一个标准的 ViewStartPage,因此所有内容都包含在继承中。

但是,当我运行应用程序时,出现错误:

ViewStartPage 只能与从 WebViewPage 或另一个 ViewStartPage 派生的页面一起使用

这是由我的自定义视图启动类的构造函数中的“Themes = new Helpers.ThemeHelper”行抛出的。那么,当我的自定义视图开始类是 ViewStartPage 的子类时,为什么会引发该异常???

4

1 回答 1

3

您无法在构造函数中访问 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();
    }
}
于 2012-06-03T21:20:54.990 回答