2016-06-16 1 views
0

セッションが終了してユーザーがフォームを送信しようとすると、問題が発生します。たぶん私は、セッションを期限切れに正しく使用していないが、インデックスにユーザーをリダイレクトする代わりに、システムがエラーをスローします。 C#MVC SessionExpireAttribute

この

はSessionExpireAttribute

public class SessionExpireAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     base.OnActionExecuted(filterContext); 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (filterContext.HttpContext.Session != null) 
     { 
      if (filterContext.HttpContext.Session.IsNewSession) 
      { 
       RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary(); 
       redirectTargetDictionary.Add("action", "Index"); 
       redirectTargetDictionary.Add("controller", "Home"); 

       filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary); 
      } 
     } 
    } 
} 

の私の定義で、属性が私のクラスに配置された場所です

namespace ContractManager.Controllers 
{ 
[SessionExpireAttribute] 
public class ICAController : Controller{} 
} 
+0

エラーは何ですか?スタックトレース全体を投稿してください。 – NightOwl888

+0

エラーは次のとおりです。オブジェクトがオブジェクトのインスタンスに設定されていません(残念ながらスタックトレースはありません)。セッションが終了したことを認識するのではなく、フォームを保存しているコードが実行され、セッションが終了したためにこのエラーがスローされます。 – vegas2033

答えて

0

あなたは割り当てる「属性」接尾辞を添付する必要はありませんカスタム属性をコントローラに送信します。

namespace ContractManager.Controllers 
{ 
[SessionExpire] 
public class ICAController : Controller{} 
} 

これは動作します。属性定義の作成/拡張は、属性の名前に「属性」を後置することによって行います。上の方法と同じです。しかし、コントローラーやアクションメイドにアトリビュートを割り当てているときは、「アトリビュート」パートを取り除いてください。