나는 내 웹 사이트에 대한 두 개의 마스터 페이지를 만들었습니다. 하나는 정상 사용 용이고 다른 하나는 인쇄용입니다. 정상적으로 마스터 페이지에 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를 저장하는 데 사용 된 컨트롤 트리와 일치해야합니다. 예를 들어 컨트롤을 동적으로 추가하면 포스트 백 중에 추가 된 컨트롤은 요청시 추가 된 컨트롤의 유형과 위치와 일치해야합니다.
기본 아이디어는 두 마스터 페이지에 존재하지 않는 컨트롤의 뷰 상태를 비활성화하면 다른 모든 것이 잘 작동한다는 것입니다. –
@iManBiglari 예, 이것이 생각입니다. 일반적으로 대부분의 컨트롤에서 viewstate를 비활성화합니다. 단지 몇 안되면 나는 그것을 내버려 뒀다. 나는 내 viewstate를 아주 작게 유지합니다. – Aristos
그리고 ASP.Net을 처음 접했기 때문에이 질문을드립니다. 마스터 페이지를 전환하기 직전에 뷰 상태를 비활성화하거나 활성화 할 수 있습니까? 또는 항상 비활성화해야합니까? 내 사용자에게 내비게이션 트리가 방문중인 페이지, 사용자 이름이 표시되지 않는 이유를 설명하는 것이 조금 어렵습니다. –