我为我的网站创建了两个母版页。一个用于正常使用,另一个用于打印。在我的普通母版页上,我有一个将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);
,但它引发了以下异常。我该如何解决它?
无法加载视图状态。 viewstate所在的控制树 正在加载必须与用于保存的控制树匹配 在上一个请求期间查看状态。例如,添加时 动态控制,回发期间添加的控件必须匹配 初始期间添加的控件的类型和位置 请求。
答案 0 :(得分:1)
我担心没有解决方法 - 你在回发后更改了viewstate的控制树。
您只能在母版页上的控件上禁用视图状态,这些控件与两个母版页冲突。
一般的想法是在有问题的控件上禁用viewstate,或者尝试在两个母版页上使用相同的控件使用相同的ID。