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
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') –
Je le sais. L'auriez-vous autrement? –
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. –