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

メッセージは自明です - 'ChildActionOnly'(' Session ["Username"] 'が' null'ならばあなたがしている)のメソッドで 'RedirectToRouteResult()'を使うことはできません。 –

+0

私はそれを知っています。それ以外の方法はありますか? –

+1

新しいRedirectToRouteResult(new RouteValueDictionary(new {action = "Index"、controller = "Login"}));ビューが既にレンダリングされた後に実行されました。おそらく '@ Html.Action'の代わりに' @ Url.Action'を使用するとこの問題を解決するかもしれません。 –

答えて

5

私は同じ例外を持っていたのリダイレクトを実行することはできませんし、私のようなIsChildActionをチェックして、それを解決:私の問題

+0

この問題は次のとおりです。** my check session属性は子アクションで使用できません**。返信ありがとう! –

関連する問題