2

我为我的网站创建了两个母版页。一个用于正常使用,另一个用于打印。在我的普通母版页上,我有一个设置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);,但它引发了以下异常。我该如何解决它?

无法加载视图状态。正在加载视图状态的控制树必须与在先前请求期间用于保存视图状态的控制树匹配。例如,当动态添加控件时,回发期间添加的控件必须与初始请求期间添加的控件的类型和位置相匹配。

4

1 回答 1

1

恐怕没有解决方法 - 您在回发后更改视图状态的控件树。

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

一般的想法是您禁用有问题的控件上的视图状态,或者您尝试在两个母版页上使用相同的控件,具有相同的 id。

于 2012-12-17T10:58:49.653 回答