2012-10-29 6 views
2

Exception이 던져지면 내 사용자 정의 오류 페이지와 함께 표시 할 수 있도록 설정했습니다. 그러나 어떤 경우에는 오류 페이지로 이동하지 않고 간단한 대화 상자 창을 표시하려고합니다.정보 표시 예외 잡기

public ActionResult Page1() 
{ 
    //The custom error page shows the exception, if one was thrown 

    throw new Exception("An exception was thrown"); 

    return View(); 
} 


public ActionResult Page2() 
{ 
    //A dialog should show the exception, if one was thrown 

    try 
    { 
     throw new Exception("An exception was thrown"); 
    } 
    catch(Exception ex) 
    { 
     ViewData["exception"] = ex; 
    } 
    return View(); 
} 

Controller 액션에서 발생 된 예외를 처리하기 위해 CustomAttribute를 사용할 수 있습니까? Page2에 CatchException을 추가 한 경우 예외가 throw 될 때마다 ViewData에 예외를 저장하는 프로세스를 자동화 할 수 있습니까? CustomAttributes에 대한 많은 경험이 없으며 도와 주시면 감사하겠습니다.

Page2 예제는 완벽하게 정상적으로 작동합니다. 대화 상자를 표시하려는 모든 작업에서 catch를 시도하는 것이 정말 좋지 않으므로 코드를보다 명확하게 만들고 싶습니다.

나는 .NET MVC를 사용하고 4

답변

3

당신은 예외를 잡을 기본 컨트롤러를 생성하고 처리 할 수 ​​있습니다 너를 위해서. 또한 컨트롤러가 이미이를 수행 할 수있는 메커니즘이있는 것처럼 보입니다. 컨트롤러 내부의 OnException 메서드를 재정의해야합니다. 당신은 여기에 좋은 예를 가져올 수 있습니다 또한 Handling exception in ASP.NET MVC

을, 여기에 OnException 사용하는 방법에 대한 다른 답변있다 : 그 사용하여 Using the OnException

, 당신의 코드는 당신이 일을하지 않습니다 때문에, 청소기 될 것입니다 많은 try/catch 블록.

처리 할 예외를 필터링해야합니다. 이와 같이 :

+0

"이후 you1"??? – CoffeeRain

+0

오버라이드 된 OnException에서 나는 그것을 잡아 대화 상자를 보여 주거나 오류 페이지로 가야할지 모르겠다. 오류 페이지 나 대화 상자를 표시할지 여부는 예외 유형이 아닌 작업에 따라 달라 지므로 예외가 NullReferenceException 인 경우 "불어"야합니다. 내가 어떻게 생각하는지 이해할 수 있습니까? – LazyTarget

+0

예, 이해했습니다. 따라서 처리하려는 예외를 필터링해야합니다. 내가 의도 한 바를 보여주기 위해 코드를 편집 할 것이다. – digaomatias

0

당신은 예외 클래스의 서브 클래스를 생성하고 페이지에 잡을 수 2

internal class DialogException : Exception 
{} 

public ActionResult Page2() 
{ 
    //This should a dialog if an exception was thrown 

    try 
    { 
     //throw new Exception("An exception was thrown, redirect"); 
     throw new DialogException("An exception was thrown, show dialog"); 
    } 
    catch(DialogException ex) 
    { 
     ViewData["exception"] = ex; 
    } 
    return View(); 
} 
+0

특정 속성이있는 사용자 지정 예외 형식이 이미 있습니다. 그래서 나는 정말로 새로운 DialogException을 만들고 Exception을 상속받을 수 없다. – LazyTarget