0

我的 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',而我的打印母版页上有另一个按钮设置Session['P']'0'。现在,我的问题是,在我更改了代码中的会话参数后,页面是使用过时的母版页呈现的,而不是当前的。用户必须按 F5 才能看到正确的页面。似乎我的page_PreInit()事件之前被触发了buttonClick()。那么,我能做些什么呢?

4

2 回答 2

1

Page_PreInit 确实在任何单击事件处理程序之前运行。

您是否考虑过使用面板或样式表在打印模式下呈现您的页面?

于 2013-01-09T12:14:46.370 回答
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';
于 2013-01-19T11:52:16.513 回答