0

ich eine _Layout Last Menü haben, wie:Kinder Aktionen nicht ausführen umleiten Aktionen erlaubt - MVC

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

in Aktion MenuRole i-Sitzung mit Action-Filter überprüfen:

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

Und in Aktion Filter :

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); 
     } 
    } 

Wenn Session-Timeout, _Layout zeigen Fehler in @ Html.Action ("MenuRole", "Menu"): Kinderaktionen werden keine Aktionen umleiten ausführen darf

+3

Die Botschaft ist selbsterklärend - Sie können 'RedirectToRouteResult()' nicht in einer Methode verwenden, die mit 'ChildActionOnly' gekennzeichnet ist (was Sie tun, wenn 'Session [" Username "]' 'null' ist) –

+0

Ich weiß es. Hättest du es anders? –

+1

Ihr Problem kommt von hier: 'new RedirectToRouteResult (neues RouteValueDictionary (neu {action =" Index ", controller =" Login "}));' ausgeführt, nachdem die Ansicht bereits gerendert wurde. Wahrscheinlich kann dieses Problem mit '@ Url.Action' anstatt mit' @Html.Action' gelöst werden. –

Antwort

5

hatte ich die gleiche Ausnahme und ich löste es durch Überprüfung IsChildAction wie:

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

, die mir das Problem gelöst

+0

Dieses Problem ist: ** Mein Prüfsitzungsattribut kann nicht für untergeordnete Aktionen ** verwendet werden. Danke für die Antwort ! –