tout ce qui est arrivé à la propriété Annuler sur l'actionexecutingContextextextextextextextext? Strong> Comment abandonner une renaction lors de l'utilisation d'une actionfilterattribute ou est-il une autre façon de cuire ce chat? <% Html.RenderAction("Menu", "Shared", new { id = Model.OtherUserId }); %>
3 Réponses :
Non, vous ne pouvez pas annuler un rendu d'un filtre d'action. Il y a de nombreuses raisons pour lesquelles vous ne devriez pas faire cela. Quel serait le client? Une page d'erreur? Rien? P>
Je suppose que vous construisez un filtre d'action autorisée qui rendrait quelque chose d'autre si vous n'êtes pas connecté. Il y en a un dans le cadre déjà (Autorizeattribute) qui vous redirige de la page de connexion si vous n'êtes pas connecté. Le chemin qu'ils le font dans le cadre consiste à modifier le résultat qui est exécuté (filterContext.result = [nouveau résultat]];). Si vous n'aimez pas comment cela fonctionne, vous pouvez créer votre propre implémentation. P>
Si vous avez toujours besoin d'annuler le rendu ou quelque chose du genre, vous devrez construire votre propre actionResulte et faire quelle que soit la logique dont vous avez besoin dans la méthode d'exécution. P>
Si vous souhaitez utiliser une action de rendu, vous devez simplement mettre la logique dans le contrôleur et renvoyer le résultat vide si vous n'êtes pas connecté (il existe un résultat d'action appelé "vide" dans le cadre). Ce type de logique appartient à l'action du contrôleur. P>
Ceci a fonctionné Great Great Mattias Le résultat est:
public override void OnActionExecuting(ActionExecutingContext filterContext) { if (!filterContext.HttpContext.User.Identity.IsAuthenticated) { filterContext.Result = new EmptyResult(); return; } base.OnActionExecuting(filterContext); }
Mais le code à l'intérieur de la méthode d'action du contrôleur est toujours en cours d'exécution?
OnAptionExecutation a lieu avant que la méthode d'action s'exécute: msdn.microsoft.com/en-us/Library/...
Mattias et Rjarmstrong déjà question anwswer. Voici le code complet pour Filtre et Controller:
Voir ma mise à jour sur Render Action.