2012-07-12 3 views
2

우리는 C#에서 asp .Net을 사용하고 있습니다. 여러 웹 사용자 컨트롤 (.ascx)로 구성된 페이지 (.aspx)ASP .Net 사용자 제어 오류 처리

사용자 컨트롤 중 하나에 예외가있는 경우 같은 방식으로 machanism 처리 오류가 싶습니다. asp .net 컨트롤에 친숙한 오류 메시지가 표시됩니다. 다른 모든 컨트롤은 예상대로 렌더링되어야합니다.

예외가 발생할 경우 표시하거나 숨기는 각 컨트롤에 자리 표시자를 두지 않으면 어떤 방식 으로든 처리 할 수 ​​있습니까? 을 App_Code에서

+1

일반적으로 예외는 언제 발생합니까? 나는 각 사용자가 내부적으로 제어 할 수있게하려고 시도했다. – Matthew

+0

일반적으로 사용자 컨트롤 내에서 예외가 발생합니다 (예 : 일부 데이터베이스 연결 오류, 캐스팅 오류 등). – Neil

+1

그런 다음 try/catch에서 데이터베이스 호출과 캐스팅 작업을 래핑해야합니다.이 작업은 모두 사용자 정의 컨트롤 내에서 수행되어야합니다. 프로그램 할 때, 나는 처리 할 수있는 예외를 잡는 경향이있다. – Matthew

답변

3

다음과 같이 할 수 있습니다.

각 UserControl이 구현해야하는 추상 OnLoad()가있는 추상 기본 클래스입니다. 오류 처리를 공유하려는 모든 이벤트에이 동일한 모델을 사용할 수 있습니다.

public abstract class BaseUserControl : UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      OnLoad(); 
     } 
     catch (Exception) 
     { 
      //Custom error handling here 
     } 
    } 

    protected abstract void OnLoad(); 
} 

public class MyUserControl: BaseUserControl 
{ 
    protected override void OnLoad() 
    { 
     //My normal load event handling here 
    } 
} 
+0

일반 이벤트의 경우에는 작동하지만 컨트롤에 의해 발생하는 클릭 이벤트 및 기타 이벤트는 어떻게됩니까? – Slight

1

1), 마이 페이지에 페이지의 상속을 변경) 페이지

class MyPage : Page { } 

2 을 상속 클래스 MyPage.cs를 만듭니다. 당신은 모든 페이지의 일반 오류 처리기를 추가, 당신은

3

을 원하는 경우 MyPage.cs 가기)를 변경하는 데 사용할 수있는 Web.config의의 속성이있다

public partial class _Default : MyPage { ... 

protected override void OnError(EventArgs e) 
{ 
    /* here you can intercept the error and show the controls that you want */ 
    base.OnError(e); 
} 
+0

답변 해 주셔서 감사합니다. 우리는 콘텐츠 관리 시스템 호출 Sitecore를 사용하고 있습니다. 페이지가 있고 컨트롤 (.ascx)이 동적으로 추가됩니다. – Neil

-1

먼저 기본 onerror 이벤트를 덮어 쓰는 기본 사용자 제어 클래스를 만듭니다.

public class MyControlClass:UserControl 
     { 

      protected override void OnError(EventArgs e) 
      { 
       //here you sould add your friendly msg implementation 



       //base.OnError(e); here should remain commented 
      } 
     } 

그럼 당신은 사용자 컨트롤을 만들 수있는 컨트롤이 예외를 생성하는 경우

public class Control1:MyControlClass 
    { 
     // .... 
     // .... 
    } 

그래서, 나머지는 작업을 계속합니다.

+1

답변 해 주셔서 감사합니다. 그러나 컨트롤이 OnError()를 발생시키지 않으므로 작동하지 않습니다. 블로그를 살펴보십시오. http://weblogs.asp.net/vga/archive/2003/06/16/8748.aspx – Neil