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
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) –
Ich weiß es. Hättest du es anders? –
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. –