2011-03-20 5 views
1

내 마스터 페이지 :ASP.net 마스터 페이지/콘텐츠 페이지 심플한 디자인 문제

public partial class MasterPages_Main : System.Web.UI.MasterPage 
{ 
    public bool IsLoggedIn; 

    protected void Page_Load(object sender, EventArgs e) 
    { 

     // Check login 
     LoggedInUser ThisUser = new LoggedInUser(); 
     IsLoggedIn = ThisUser.IsLoggedIn; 

     Response.Write("Master" + IsLoggedIn.ToString()); 

    } 

이 출력 '진정한', 우리는 로그인 내 콘텐츠 페이지에서

내가 할 :.

protected void Page_Load(object sender, EventArgs e) 
{ 

    Response.Write("CONTENT:" + Master.IsLoggedIn.ToString()); 
} 

그러나 'False'가 출력됩니다. 내 콘텐츠 페이지에서

Content:False 
Master:True 

나는 사용자가 로그인되어있는 경우 리디렉션해야하지만이 값은 항상 뷰의 콘텐츠 페이지 지점에서 거짓 :

그래서 실제 페이지 출력입니다! 이 문제를 어떻게 해결할 수 있습니까?

+0

해결 : master를 page_init으로 변경했습니다. –

답변

3

콘텐츠 페이지로드로드 이벤트가 발생하기 전에 마스터로드 (here)가 발생합니다. 따라서 논리를 변경하고 마스터의 일부 콘텐츠 페이지 메서드를 호출해야 할 수도 있습니다 Page_Load. 또는 Master Init 이벤트 핸들러 내에 IsLoggedIn을 설정하십시오.

+0

감사합니다, init은 다른 로직에 대해서도 똑같은 일을했기 때문에 작동하지 않았습니다. 그러나 그것을 모듈화하고 마스터 함수 안에 로직을 두는 것이 이것을 해결 한 것 같습니다. –

1

Page_Load()에 대한 코드 다음에 마스터 페이지가 호출됩니다. 시도해보십시오 :

Protected void Page_Load(object sender, EventArgs e) 
{ 
    base.Page_Load(sender,e); 
    Response.Write("CONTENT:" + Master.IsLoggedIn.ToString()); 
} 
+0

전화 한 적이 없다면 어떻게 현재'Master : True'를 출력하고 있습니까? – David

+0

죄송 합니다만 작동하지 않습니다. 또한 모든로드가 잘 되었기 때문에로드 중이라고 생각합니다. 잘못된 순서로로드하는 것입니다. –

+0

master_page_load를 page_init으로 변경하면 작업을 먼저로드해야합니다. –

2

변경 마스터 Page_Load에서 Page_Init으로 변경하면 내용 페이지보다 먼저 강제로 실행됩니다.