2009-12-30 2 views
1

조치 필터 속성을 통해 사용자 정의 오류 처리를 구현하려고합니다.액션 필터 속성을 통해 ASP.Net MVC 사용자 정의 오류 처리

[HandleError (Order = 2)] 
[HandleError (Order = 1, ExceptionType = typeof(NullReferenceException), View = "CustomError")] 
public class ArticlesController : Controller 
{ 

    public object OhDearACrash() 
    { 
     throw new Exception("Oh Dear"); 
    } 

    public ActionResult NullRefCrash() 
    { 
     throw new NullReferenceException(); 
    } 

    public ActionResult ThrowNotImplemented() 
    { 
     throw new NotImplementedException(); 
    } 

OhDearACrash 및 ThrowNotImplemented 둘 [는 handleError] 공유보기/위치한 Error.aspx로를 통해 에러 메시지를 렌더링하는 촬상되어 다음과 같이

내 코드이다.

OhDearACrash와 예

:

Message = <%= ViewData.Model.Exception.Message %> 

Message = Oh Dear 

NullRefCrash가 [HandeError]은 예외 유형 = 대해서 typeof (는 NullReferenceException)을 다루는 것을 의해 촬상되는 렌더링한다. 인 CustomError가 ViewData.Model가 null 예외가 CustomError.aspx를 만들려면

System.NullReferenceException was unhandled by user code 
Message="Object reference not set to an instance of an object." 

을 발생

Message = <%= ViewData.Model.Exception.Message %> 

를 사용하여 오류 메시지가 렌더링을 시도

내가 Error.aspx로 복사 및 붙여 넣기 새로 생성 된 뷰/오류에 추가하고 CustomView.aspx로 이름을 변경합니다.

Error.aspx와 CustomError.aspx는 본질적으로 동일하므로 어떻게 발생합니까?

편집 :

나는 단지 위와 CustomError.aspx보기는 완벽하게 잘 작동이 포함 된 테스트 프로젝트 생성 - 문제를 찾아 내 기존 프로젝트를 디버깅하는 어쨌든 거기를?

답변

2

난 그냥 ASP.NET MVC 1.0이 시도하고 올바른 동작을 얻고있다.

다른 필터가 실행 중이고 오류가 어떻게 든 변경 될 수 있습니까?

+0

이론상으로 아니오, 나는 그것을 묘사 한대로 일어난다. 코드를 단계별로 실행하면 ThrowNotImplemented에서 CustomError.aspx로, OhDearACrash에서 Error.aspx로가는 것과 같은 방식으로 진행됩니다. –

+0

공유 뷰 디렉터리에 오류 페이지를 복사하여 다시 붙여 넣은 다음 이름을 MyError로 변경하고 [HandleError (Order = 1, ExceptionType = typeof (NullReferenceException), View = "MyError")]를 통해이를 참조했습니다. 작품에 Views/Shared 디렉토리를 사용 했습니까? –

관련 문제