我的ASP.NET应用程序中有两个母版页。一个用于常规使用,另一个用于打印。我使用会话参数来查看应用程序当前是否处于打印模式:
method Global.Application_PreRequestHandlerExecute(src: System.Object; e: EventArgs);
begin
var p: System.Web.UI.Page := System.Web.UI.Page(self.Context.Handler);
if p <> nil then begin
p.PreInit += new EventHandler(page_PreInit)
end
end;
method Global.page_PreInit(sender: System.Object; e: EventArgs);
begin
var p: System.Web.UI.Page := System.Web.UI.Page(self.Context.Handler);
if p <> nil then
if p.Master <> nil then
begin
if Session['P'].ToString = '1' then
p.MasterPageFile := '~/Print.Master'
else
p.MasterPageFile := '~/Site.Master';
end;
end;
我的普通页面上有一个按钮,将Session['P']
设置为'1'
,另一个设置在我的打印主页面上,设置{{ 1}}到Session['P']
。现在,我的问题是,在我更改了代码中的session参数之后,使用过时的母版页而不是当前的母版页来呈现页面。用户必须按F5才能看到正确的页面。我的'0'
事件似乎在page_PreInit()
之前被触发了。那么,我该怎么办?
答案 0 :(得分:1)
Page_PreInit在任何点击事件处理程序之前运行。
您是否考虑过使用面板或样式表以打印模式呈现页面?
答案 1 :(得分:0)
我最终在我的Request.Params['__EVENTTARGET']
事件中使用Page_PreInit
来确定点击的控件是否是负责在普通和打印模式之间切换的按钮。我的代码如下所示:
S := Request.Params['__EVENTTARGET'];
if S.Length > 0 then
S := S.Substring(S.IndexOf('$') + 1);
if S = 'lbPrint' then
Session['P'] := '1'
else if S = 'lbNormal' then
Session['P'] := '0';