2012-08-08 12 views
1

마스터 페이지 (레이블이있는 업데이트 패널)에 메시지 영역이 정의되어 있습니다. 전 세계적으로 모든 예외를 처리하고 싶습니다. 그리고 Global.asax의 Application_Error 이벤트에서이 예외를 잡아낼 수 있고 거기에서 레이블 텍스트를 변경하고 패널을 업데이트 할 수 있다고 생각했습니다. 그러나 텍스트가 새로 고침되지 않습니다. 페이지 수명주기를 올바르게 이해하지 못했기 때문일 수 있습니다. application_error 이벤트에서 레이블 텍스트를 변경할 수 있습니까? Site.Master에서Global.asax에서 레이블 텍스트 변경

void DisplayErrorOnPage(AppException myEx) 
{ 
    System.Web.UI.Page page = System.Web.HttpContext.Current.Handler 
     as System.Web.UI.Page; 
    if (page != null) 
    { 
     Label ErrorLabel = page.Master.Master.FindControl("StatusMessage") 
           as Label; 
     ErrorLabel.Text = myEx.Message; 
     UpdatePanel up = page.Master.Master.FindControl("StatusMessagePanel") 
          as UpdatePanel; 
     up.Update(); 
    } 
} 

void Application_Error(object sender, EventArgs e) 
{ 
    Exception myEx = Server.GetLastError().GetBaseException(); 

    //if it's a controlled exception, display it on the current page 
    //otherwise redirect to an error page 
    if (myEx is AppException) 
    { 
     if (((AppException)myEx).RedirectToErrorPage) 
      RedirectToErrorPage(myEx); 
     else 
      DisplayErrorOnPage((AppException)myEx); 
    } 
    else 
    { 
     RedirectToErrorPage(myEx); 
    } 
} 

메시지 영역은 다음과 같이 정의된다 :

<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="StatusMessagePanel"> 
    <ContentTemplate> 
     <asp:Label runat="server" ID="StatusMessage" Text="Message zone" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

답변

1

것은 가능하다, 왜 텍스트가 새로 고쳐지지 않는이 내 코드? 아약스 구현에 문제가있을 수 있으며 페이지 코드를 추가하면 더 나은 답변을 얻을 수 있습니다! Application_Error가 애플리케이션 레벨 상태 관리 메커니즘이라는 것을 알고 계십니까? Application_Error 이벤트를 사용하여 사용자 수준의 오류가 아닌 응용 프로그램 수준의 오류를 잡으십시오.

+0

Site.Master 페이지에서 관련 부분을 추가했습니다. –

+0

이제 생각해 봅시다. Application_Error가 아닌 Page_Error의 레이블 텍스트를 변경해야합니다. –