Webサイト用に2つのマスターページを作成しました。1つは通常の使用用で、もう1つは印刷用です。通常のマスターページには、に設定するボタンがありSession['P']
ます'1'
。印刷マスターページに、に設定する別のボタンがありSession['P']
ます'0'
。また、Global.asax.pasには、使用するマスターページを決定するための次のコードがあります。
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 Session['P'].ToString = '1' then
p.MasterPageFile := '~/Print.Master'
else
p.MasterPageFile := '~/Site.Master';
end;
設定後Session['P']
、マスターを変更するためにページをリロードする必要があります。すべてのコントロールのビューステートを保持する必要があるため、を使用できませんResponse.Redirect()
。を使ってみServer.Transfer(Request.Url.AbsolutePath, True);
ましたが、次のような例外が発生します。どうすれば回避できますか?
ビューステートのロードに失敗しました。ビューステートがロードされるコントロールツリーは、前のリクエスト中にビューステートを保存するために使用されたコントロールツリーと一致する必要があります。たとえば、コントロールを動的に追加する場合、ポストバック中に追加されたコントロールは、最初のリクエスト中に追加されたコントロールのタイプと位置と一致する必要があります。