2013-01-20 8 views
0

나는 마스터 페이지를 변경하는 내 Global.asax에이 코드를 사용하고 있습니다 :마스터 페이지를 변경할 때 콘텐츠 페이지 컨트롤의 viewstate를 유지하는 방법?

마스터 페이지가 변경 될 때마다
method Global.Application_PreRequestHandlerExecute(src: System.Object; e: EventArgs); 
begin 
    var p: System.Web.UI.Page := System.Web.UI.Page(self.Context.Handler); 
    if p <> nil then 
    p.PreInit += new EventHandler(page_PreInit) 
end; 

method Global.page_PreInit(sender: System.Object; e: EventArgs); 
var 
    S: String; 
begin 
    var p: System.Web.UI.Page := System.Web.UI.Page(self.Context.Handler); 
    if p <> nil then 
    if p.Master <> nil then 
    begin 
     if Request.Params['__EVENTTARGET'] <> nil then 
     begin 
     S := Request.Params['__EVENTTARGET']; 
     if S.Length > 0 then 
      S := S.Substring(S.IndexOf('$') + 1); 
     if S = 'lbPrint' then 
      Session['P'] := '1' 
     else if S = 'lbNormal' then 
      Session['P'] := '0'; 

     if Session['P'].ToString = '1' then 
      S := '/Print.Master' 
     else 
      S := '/Site.Master'; 
     if not p.MasterPageFile.ToUpper.Equals(S.ToUpper) then 
      p.MasterPageFile := S; 
     end; 
    end; 
end; 

, 콘텐츠 페이지의 모든 컨트롤의 viewstate가 손실됩니다. 나는 그들을 보존하는 방법을 알고 싶습니다 ...

답변

1

마스터 페이지를 변경하면 결과 컨트롤 구조가 영향을받습니다. 따라서 컨트롤 지시자를 사용하기 때문에 ASP.NET은 viewstate를로드 할 수 없습니다.

사용하는 .NET의 버전을 알 수 없지만이를위한 해결책이있을 수 있습니다.

ViewStateModeByIdAttribute을 사용해 보셨습니까?

이 특성을 사용하는 사용자 지정 컨테이너 컨트롤이 필요하며 구현은 INamingContainer입니다.