2009-12-30 3 views
1

J'essaie d'implémenter la gestion des erreurs personnalisées via les attributs de filtre d'action.ASP.Net MVC Traitement des erreurs personnalisées via les attributs de filtre d'action

Mon code est le suivant:

[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 et ThrowNotImplemented sont à la fois repris par [HandleError] qui rend le message d'erreur via Error.aspx situé dans les vues/partagés.

Par exemple avec OhDearACrash:

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

rend

Message = Oh Dear 

NullRefCrash est capté par le [HandeError] qui traite un ExceptionType = typeof (NullReferenceException).

Lorsque CustomError tente de rendre le message d'erreur à l'aide

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

la ViewData.Model est nulle et une exception est levée

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

Pour créer CustomError.aspx j'ai copié et collé Error.aspx à mon Views/Error nouvellement créé et renommé en CustomView.aspx.

Depuis Error.aspx et CustomError.aspx sont essentiellement les mêmes comment cela se produit-il?

Edit:

J'ai créé un projet de test qui ne contient que ce qui précède et la vue CustomError.aspx fonctionne parfaitement bien - Y at-il de toute façon de déboguer mon projet existant pour trouver le problème?

Répondre

2

J'ai juste essayé ceci sur ASP.NET MVC 1.0 et j'obtiens le comportement correct.

Est-il possible que vous ayez un autre filtre en cours d'exécution et que vous changiez l'erreur?

+0

En théorie non, cela se passe comme je l'ai décrit. Si je parcours le code, il passe de ThrowNotImplemented à CustomError.aspx de la même manière que de OhDearACrash à Error.aspx. –

+0

Lorsque j'ai copié la page Erreur dans le répertoire Vues partagées et l'y avez collé et renommé MyError et référencé via [HandleError (Order = 1, ExceptionType = typeof (NullReferenceException), View = "MyError")] fonctionne, avez-vous utilisé le répertoire Views/Shared dans votre test? –

Questions connexes