需要访问PreRequestHandlerExecute中Global.asax中的Page对象

时间:2010-05-31 04:29:13

标签: vb.net

我有一个庞大的网站(包含大约5000多个)页面。网站中有一个主题功能,用户可以为其个人资料选择不同的颜色。现在我想使用ASP.net主题功能并在主题文件夹和Global.asax中放置不同的CSS(针对不同的颜色)我想检查用户主题并使用css呈现适当的链接元素。但我的问题是,我无法访问页面元素以添加页面中的链接。 这是我的代码


Dim page As System.Web.UI.Page = TryCast(System.Web.HttpContext.Current.Handler,System.Web.UI.Page)
page.StyleSheetTheme = "Black"

但是当我运行此代码时,我得到一个Null引用错误。

P.s:我的应用程序非常庞大,因此无法拥有母版页或基类并在每个页面中继承它。

请建议。

2 个答案:

答案 0 :(得分:0)

该页面在PreRequestExecute中不可用。在asp.net处理之前调用此函数,asp.net负责页面。将PreRequestExecute视为事先计划的早期,例如当IIS首次尝试弄清楚如何使用 thing 时, thing 甚至不是页面还没有。

您可能希望查看可以挂钩的其他一些事件,在页面加载后会发生可能允许您执行建议的事件。

答案 1 :(得分:0)

请考虑使用母版页,而不是为此进入global.asax。一种可能性是拥有嵌套的母版页,其中第一个母版页设置整体布局,嵌套的母版处理主题。 (或者是几个嵌套母版页中的一个,都引用相同的顶级母版页)。如有必要,您可以使用页面中的PreInit事件来更改母版页,并选择与您的主题选择匹配的母版。

您可以通过拥有自己的继承System.Web.UI.Page的类来集中此函数,并让所有自己的页继承此新类。在那里处理PreInit事件。 (以及其他有用的功能,如未处理异常的页面级处理,一般安全问题等。

编辑添加:正如@a​​epheus正确指出的那样,该页面尚未在PreRequestHandlerExecute事件中实例化。因此,您无法访问任何页面类。