c# - ViewStartPage 只能与派生自 WebViewPage 或另一个 ViewStartPage 的页面一起使用

标签 c# asp.net asp.net-mvc-3 webview

由于某些需要,我创建了自己的自定义 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/

相关文章:

c# - 什么是集合语义(在.NET中)?

c# - 如何将 PowerPoint(.ppt、.pptx)转换为每张幻灯片的多个图像?

c# - asp.net 中图像的 Foreach 循环

c# - ASP.net 发布一个元素名称前缀为 "ct100$"的表单

asp.net-mvc - 在局部 View 中传递参数-MVC3/Razor

c# - 使用 Membership.CreateUser 时数据保存在哪里?

c# - 使用 .NET 和 Canvas 应用程序的 facebook api 获取 CanvasUrl 为空或为空

c# - 处理非常低的动画帧率

asp.net - 如何在 ASP.NET 中创建电子邮件队列机制以防网络出现故障?

asp.net-mvc-3 - ASP.NET MVC 3 和 jquery.unobtrusive-ajax.min.js