2010-08-05 2 views
0

Dans ce scénario, je souhaite également contourner ma consignation d'erreur normale, qui ne fonctionne pas, et demander simplement l'affichage Erreur et envoyer un courrier électronique. Je ne souhaite pas dupliquer ce traitement de cas particulier dans tous les contrôleurs et l'accès à la base de données peut être tenté avant qu'une action ne soit demandée. Où dois-je placer ce gestionnaire spécial, et si ce n'est pas dans un contrôleur, comment puis-je appeler la vue Erreur? Oh oui, j'utilise Elmah pour la consignation de routine des exceptions non gérées.Gestion d'un scénario d'une base de données indisponible dans une application MVC

Répondre

1

Essayez d'utiliser quelque chose le long de ces lignes dans votre contrôleur

[HandleError(ExceptionType = typeof(SqlException), View = "SqlError")] 
Public Class ProductController: Controller { 
    public ViewResult Item(string itemID) 
    { 
      Item item = ItemRepository.GetItem(itemID); 
      return View(item); 
    } 
} 

maintenant dans votre dossier Views/Shared/ vous pouvez créer une vue appelée « SqlError.aspx » qui sera retourné s'il y a une exception SQL.

Je vous recommande également de gérer toutes vos "erreurs" d'application dans le fichier Global.asax. IE: la partie qui fait l'envoi par courrier électronique de l'erreur, l'enregistrement de l'erreur, etc.

Vérifiez cette question SO une idée
ASP.NET MVC Custom Error Handling Application_Error Global.asax?

0

Je ne sais pas ce que votre code est mais en supposant l'exploitation forestière se fait dans quelque chose globale de gestion des erreurs puis modifier le traitement des erreurs à être comme ça devrait le faire:

try 
{ 
    //logging 
} 
catch(SqlException) 
{ 
    //send email 
    return View("Error"); 
} 
Questions connexes