0

J'ai un menu de charge _layout comme:actions d'enfants ne sont pas autorisés à effectuer redirect actions - MVC

... 
@Html.Action("MenuRole","Menu") 
... 

en action MenuRole i vérifier la session avec filtre d'action:

[CheckSession] 
[ChildActionOnly] 
public ActionResult MenuRole() 
{ 
    .... 
    return PartialView("_LoadMenu",menuModel); 
//_LoadMenu is partial view to show menurole 
} 

Et dans le filtre d'action :

public class CheckSession : ActionFilterAttribute, IActionFilter 
    { 

     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      var ctx = filterContext.HttpContext; 

      //if Session == null => Login page 
      if (ctx.Session["Username"] == null) 
      { 
       filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { action = "Index", controller = "Login" })); 

      } 

      base.OnActionExecuting(filterContext); 
     } 
    } 

Lorsque expiration de la session, _layout erreur show dans @ Html.Action ("MenuRole", "Menu"): actions d'enfants ne sont pas autorisés à effectuer rediriger les actions

+3

Le message est explicite - vous ne pouvez pas utiliser 'RedirectToRouteResult()' dans une méthode marquée 'ChildActionOnly' (ce que vous faites si' Session ["Username"] 'est' null') –

+0

Je le sais. L'auriez-vous autrement? –

+1

Votre problème vient d'ici: 'new RedirectToRouteResult (new RouteValueDictionary (new {action =" Index ", controller =" Login "}));' exécuté après la vue déjà rendue. L'utilisation de '@ Url.Action' au lieu de' @ Html.Action' peut probablement résoudre ce problème. –

Répondre

5

j'ai eu la même exception et je résolus en vérifiant IsChildAction comme:

 //if Session == null => Login page 
     if (ctx.Session["Username"] == null && !filterContext.IsChildAction) 
     { 
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { action = "Index", controller = "Login" })); 
     } 

qui m'a résolu le problème

+0

Ce problème est: ** mon attribut de session de vérification ne peut pas être utilisé sur les actions enfants **. Merci pour votre réponse ! –