0

을 나는이 _layout로드 메뉴가 : 액션 MenuRole에서아동의 행동은 재 작업을 수행 할 수 없습니다 - MVC

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

내가 액션 필터로 세션을 확인 :

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

그리고 액션 필터에

:

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

때 세션 시간 제한, @ Html.Action ("MenuRole", "메뉴")에서 _layout 쇼 오류 : 아이의 행동은 행동

+3

를 해결

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

메시지는 자명하다 - 'Session [ "Username"]'가'null' 인 경우에 당신이하고있는'ChildActionOnly' 메소드에'RedirectToRouteResult()'를 사용할 수 없다. –

+0

나는 그것을 안다. 다른 방법 있으십니까? –

+1

당신의 문제는 여기에서 온다 :'새로운 RedirectToRouteResult (new RouteValueDictionary (new {action = "Index", controller = "Login"})); 아마'@ Html.Action' 대신에'@Url.Action'을 사용하면이 문제를 해결할 수 있습니다. –

답변

5

나도 같은 예외를했다 리디렉션을 수행 할 수 없습니다와 내가 좋아하는 IsChildAction을 확인하여 그것을 해결 : 나에게 문제

+0

이 문제는 다음과 같습니다. ** 내 체크 세션 속성은 하위 작업 **에서 사용할 수 없습니다. 답변 감사합니다 ! –