2009-12-30 6 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, расположенной в Views/Shared.

Например с OhDearACrash:

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

оказывает

Message = Oh Dear 

NullRefCrash подхватывается кнопку [HandeError], который имеет дело с ExceptionType = TypeOf (NullReferenceException).

Когда CustomError пытается вынести сообщение об ошибке с помощью

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

ViewData.Model является недействительным и не возбуждается исключение

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

Для создания CustomError.aspx я скопировал и вставил Error.aspx к моим вновь созданным представлениям/ошибкам и переименован в CustomView.aspx.

Поскольку Error.aspx и CustomError.aspx по существу одинаковы, как это происходит?

Edit:

Я создал тестовый проект, который содержит только выше и вид CustomError.aspx отлично работает - Есть ли вообще отлаживать существующий проект, чтобы найти проблему?

ответ

2

Я просто попробовал это на ASP.NET MVC 1.0, и я получаю правильное поведение.

Возможно ли, что у вас есть другой фильтр в другом месте, который работает и как-то изменил ошибку?

+0

В теории нет, это происходит, как я описал это. Если я пройду через код, он будет передан от ThrowNotImplemented on до CustomError.aspx так же, как от OhDearACrash до Error.aspx. –

+0

Когда я скопировал страницу Error в каталоге Shared Views и вставил ее туда и переименовал ее в MyError и ссылался на нее через [HandleError (Order = 1, ExceptionType = typeof (NullReferenceException), View = "MyError")] it работает ли, вы использовали каталог Views/Shared в своем тесте? –

Смежные вопросы