我为我的网站创建了两个主页。一个用于正常使用,另一个用于打印。在我的普通主页上,我有一个将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);
,但它引发了以下异常。我该如何解决它?
加载视图状态失败。视图状态所在的控件树正在加载的控件树必须与用于保存的控件树匹配上一次请求期间的视图状态。例如,添加控件,在回发期间添加的控件必须匹配初始过程中添加的控件的类型和位置要求
恐怕没有解决办法了——在发布后更改视图状态的控件树。
您只能禁用母版页上控件的视图状态,这些控件与两个母版页冲突。
一般的想法是,您可以禁用有问题的控件的视图状态,或者尝试在具有相同id的两个母版页上使用相同的控件。