2009-07-26 9 views
2

Je travaille sur un projet MVC où j'ai copié beaucoup de travail du projet NerdDinner. Dans NerdDinner nous retournons quelques vues comme DinnerNotFound, InvalidOwner si un dîner n'est pas trouvé ou si un utilisateur n'est pas un propriétaire du dîner. Mais dans mon projet voulez créer une vue (CustomException) et l'utiliser pour toutes ces raisons. Donc, je lève l'exception et les attrape dans l'événement OnException de mon basecontrller. Ensuite, à partir de là, je veux afficher une vue personnalisée après l'avoir enregistrée sur ELMAH.question MVC Elmah

Mais l'appel pour rendre cette vue (RedirectToAction ("CustomException", ce);) ne semble pas fonctionner, il faut d'abord naviguer vers l'action CustomException. Est-ce que quelqu'un peut m'aider quelle pourrait être la raison. J'ai listé tous les fichiers ici. Aussi comment devrais-je faire une entrée dans le fichier global.asax.cs. codes sont donnés ci-dessous.

Cordialement Parminder

ListingExceptions.cs

espace de noms Listing.Exceptions { ListingExeceptions public static class {

public static CustomException GetCustomException(Exception ex) 
    { 
     CustomException ce = new CustomException(); 
     switch (ex.Message) 
     { 
      case ItemConstant.INVALID_OWNER: 
       ce = new CustomException("Invalid Owner", "OOps you are not owner of this item"); 
       break; 
      case ItemConstant.ITEM_NOT_FOUND: 
       ce = new CustomException("Item not Found", "The Item you are looking for couldnt be found"); 
       break; 
      default: 
       ce = new CustomException("Error ", "There is an Error."); 
       break; 
     } 

     return ce; 

    } 


} 

}

de BaseController.cs

Listing.Controllers espace de noms { public partial class BaseController: Contrôleur {

public virtual ActionResult CustomException(CustomException ce) 
    { 
     return View(ce); 
    } 

    protected override void OnException(ExceptionContext filterContext) 
    { 
     base.OnException(filterContext); 

     CustomException ce = ListingExeceptions.GetCustomException(filterContext.Exception); 
     ErrorSignal.FromCurrentContext().Raise(filterContext.Exception); 
     filterContext.ExceptionHandled = true; 

     RedirectToAction("CustomException",ce); 
    } 
} 

}

ListingController.cs

espace de noms Listing.Controllers

{

Détails ActionResult public virtuel (à long id, titre de chaîne) {

 Item item = itemRepository.GetItemByID(id); 

     if (item == null) 

     { 

      throw new Exception("ItemNotFound"); 

     } 

     else 

     { 

      return View("Details", new ListingFormViewModel(item, photoRepository)); 

     } 
    } 

}

de Global.asax.cs

routes.MapRoute ( "Exception", // Nom de la route " {controller}/{action}/{ce} ", // URL avec les paramètres new {controller =" Base ", action =" CustomException ", ce =" "});

+0

votre question S'il vous plaît reformuler/titre afin qu'il explique en fait ce que vous essayez de résoudre. – Soviut

Répondre

1

Je ne suis pas sûr que vous pouvez rediriger comme ça dans OnException. Ajout d'un filterContext.Result = devrait fonctionner:

protected override void OnException(ExceptionContext filterContext) 
{ 
    base.OnException(filterContext); 

    CustomException ce = ListingExeceptions.GetCustomException(filterContext.Exception); 
    ErrorSignal.FromCurrentContext().Raise(filterContext.Exception); 
    filterContext.ExceptionHandled = true; 

    filterContext.Result = RedirectToAction("CustomException",ce); 
} 
+0

cela a aidé. merci eyenz – Parminder