2012-12-17 55 views
2

我爲我的網站創建了兩個主頁面。一個用於正常使用,另一個用於打印。在我的正常母版頁上,我有一個按鈕,它將Session['P']設置爲'1'。在打印母版頁,我有另一個按鈕設置Session['P']'0'。而在我的Global.asax.pas,我有以下的代碼,以確定要使用的母版頁:如何在更改內容頁面的母版頁時保留ViewState?

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);,但它引發了以下異常。我該如何解決它?

無法加載視圖狀態。視圖狀態爲 的控制樹必須與前一個請求期間用於保存視圖狀態的控制樹相匹配。例如,動態添加 控件時,在回發期間添加的控件必須匹配 在初始 請求期間添加的控件的類型和位置。

回答

1

恐怕沒有解決方法 - 在回發後更改viewstate的控件樹。

您只能禁用母版頁上的控件的視圖狀態,這些控件與兩個母版頁發生衝突。

一般的想法是,您可以在有問題的控件上禁用視圖狀態,或者嘗試在兩個主頁上使用相同的控件,使用相同的ID。

+0

所以,基本的想法是,如果我禁用兩個主頁上不存在的控件的視圖狀態,一切都會正常工作? –

+0

@iManBiglari是的,這是主意 - 一般來說,我禁用了大部分控件的視圖狀態。只有少數我放過它。我保持我的視圖狀態非常小。 – Aristos

+0

而且,我問這是因爲我對ASP.Net很陌生。我可以在切換母版頁之前禁用並啓用視圖狀態嗎?或者應該始終禁用?向我的用戶解釋爲什麼導航樹不跟蹤他們正在訪問的頁面,用戶名不顯示等等有點困難。 –

相關問題