如何在更改内容页面的母版页时保留ViewState?

时间:2012-12-17 10:48:22

标签: asp.net delphi-prism oxygene

我为我的网站创建了两个母版页。一个用于正常使用,另一个用于打印。在我的普通母版页上,我有一个将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所在的控制树   正在加载必须与用于保存的控制树匹配   在上一个请求期间查看状态。例如,添加时   动态控制,回发期间添加的控件必须匹配   初始期间添加的控件的类型和位置   请求。

1 个答案:

答案 0 :(得分:1)

我担心没有解决方法 - 你在回发后更改了viewstate的控制树。

您只能在母版页上的控件上禁用视图状态,这些控件与两个母版页冲突。

一般的想法是在有问题的控件上禁用viewstate,或者尝试在两个母版页上使用相同的控件使用相同的ID。