2012-12-17 6 views
2

나는 내 웹 사이트에 대한 두 개의 마스터 페이지를 만들었습니다. 하나는 정상 사용 용이고 다른 하나는 인쇄용입니다. 정상적으로 마스터 페이지에 Session['P']을 으로 설정하는 버튼이 있습니다. 마스터 페이지에는 Session['P']'0'으로 설정하는 또 다른 단추가 있습니다. 그리고 내 Global.asax.pas에, 내가 사용하는 마스터 페이지를 결정하기 위해 다음과 같은 코드를 가지고 : 설정 Session['P']콘텐츠 페이지의 마스터 페이지를 변경할 때 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; 

, 나는 마스터 변경하기위한 페이지를 다시로드해야합니다. 보기 상태이 보존되어야하며 따라서 Response.Redirect()을 사용할 수 없습니다. 내가 Server.Transfer(Request.Url.AbsolutePath, True);을 사용하여 시도했지만 다음과 같은 예외가 발생합니다. 어떻게 해결할 수 있습니까?

viewstate를로드하지 못했습니다. viewstate가로드되는 인 컨트롤 트리는 이전 요청 동안 viewstate를 저장하는 데 사용 된 컨트롤 트리와 일치해야합니다. 예를 들어 컨트롤을 동적으로 추가하면 포스트 백 중에 추가 된 컨트롤은 요청시 추가 된 컨트롤의 유형과 위치와 일치해야합니다.

답변

1

나는 주위에 아무 일도 없다는 것을 두려워합니다 - 포스트 백 후에 viewstate의 컨트롤 트리를 변경합니다.

두 마스터 페이지와 충돌하는 컨트롤 인 마스터 페이지의 컨트롤에서만 viewstate를 해제 할 수 있습니다.

일반적인 생각은 문제가있는 컨트롤에서 viewstate를 사용하지 않도록 설정하거나 동일한 ID를 사용하여 두 마스터 페이지에서 같은 컨트롤을 사용하려고하는 것입니다.

+0

기본 아이디어는 두 마스터 페이지에 존재하지 않는 컨트롤의 뷰 상태를 비활성화하면 다른 모든 것이 잘 작동한다는 것입니다. –

+0

@iManBiglari 예, 이것이 생각입니다. 일반적으로 대부분의 컨트롤에서 viewstate를 비활성화합니다. 단지 몇 안되면 나는 그것을 내버려 뒀다. 나는 내 viewstate를 아주 작게 유지합니다. – Aristos

+0

그리고 ASP.Net을 처음 접했기 때문에이 질문을드립니다. 마스터 페이지를 전환하기 직전에 뷰 상태를 비활성화하거나 활성화 할 수 있습니까? 또는 항상 비활성화해야합니까? 내 사용자에게 내비게이션 트리가 방문중인 페이지, 사용자 이름이 표시되지 않는 이유를 설명하는 것이 조금 어렵습니다. –