Question

Je travaille sur un projet MVC où j'ai copié beaucoup de travail de projet NerdDinner. En NerdDinner nous revenions quelques vues comme DinnerNotFound, InvalidOwner si un dîner ne se trouve pas ou si un utilisateur n'est pas propriétaire du dîner. Mais dans mon projet veulent créer un vue (CustomException) et l'utiliser pour toutes ces raisons. Alors je lève exception et les attraper dans le cas OnException de mon basecontrller. Ensuite, à partir de là que je veux rendre une vue personnalisée après loging à ELMAH.

Mais l'appel à rendre ce point de vue (RedirectToAction ( "CustomException", ce);) doesnt semble fonctionner, il doenst naviguer à l'CustomException d'action.

Quelqu'un peut-il me aider ce qui pourrait être la raison. J'ai énuméré tous les fichiers ici. Aussi comment dois-je faire une entrée dans le fichier de Global.asax.cs. sont donnés ci-dessous les codes.

Cordialement Parminder

ListingExceptions.cs

espace de nom 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;

    }


}

}

BaseController.cs

espace de nom Listing.Controllers {     classe partielle publique 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

Listing.Controllers d'espace de noms

{

public virtuel ActionResult Détails (longue 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));

        }
    }

}

Global.asax.cs

routes.MapRoute (                             "Exception", // Nom de la route                             "{Contrôleur} / {action} / {} CE", // URL avec des paramètres                             nouveau {controller = "Base", action = "CustomException", ce = ""});

Était-ce utile?

La solution

Je ne suis pas sûr que vous pouvez rediriger comme ça dans les 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 );
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top