0

ASP.NET アプリケーションに 2 つのマスター ページがあります。1 つは通常用、もう 1 つは印刷用です。セッション パラメーターを使用して、アプリケーションが現在印刷モードかどうかを確認します。

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']されたボタンがもう 1 つあります'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 に答える