2017-12-04 6 views
0

ASP.NET MVCのプロジェクトで作業しています。セッションを使用してデータを保存する必要があります。コントローラーからセッションを変更または取得できません

これはコードです:

HomeController.cs

public class HomeController : Controller 
{ 
    public HomeController() 
    { 
    } 

    public void ChangeValue(){ 
     //I get userId with some other data from db and set to session 
     //but for the sake of simplicity i set here to 10. 
     Session["getSession"] = "10"; 
    } 

    //I use this method only for getting the changed session value 
    public ActionResult GetWaiting() 
     { 
      //now i just need to return the changed value 
      return Json(Session["getSession"], JsonRequestBehavior.AllowGet); 
     } 
} 

のWeb.config

<system.web> 
    <compilation debug="true" targetFramework="4.6.1" /> 
    <httpRuntime targetFramework="4.6.1" /> 
    <httpModules> 
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" /> 
    </httpModules> 
    <sessionState mode="InProc" timeout="1" cookieless="true" /> 
</system.web> 

Index.cshtml

<h1 id="session"></h1> 
@section scripts{ 

<script> 
    $(function() { 
     function getWait() { 
      $.ajax({ 
       url: 'http://localhost:50325/Home/GetWaiting', 
       success: function (data) { 
        $('#session').text('@Session["getSession"]'); 
       } 
      }); 
     } 

     setInterval(function() { 
      getWait(); 
     }, 1000); 
}) 
</script> 

} 

しかし、問題はそのたびに私はありますデータをtから取得しようハットセッション、それはnullを返します(私はそれを使用したことがないように)。 私はまた、System.Web.HttpContext.Current.Session ["getSession"]でSessionを設定しようとしましたが、それでも変更はしません。 Web.configでもタイムアウトを変更してCookieを削除しようとしましたが、それでも同じです。

p.s.セッションにその値を格納する必要があります。別のメソッドによって値が変更されているため、別のメソッドで設定された新しい値を取得するだけです。 GetWaiting方法において

+0

あなたのスクリプト内の@Session ["getSession"] 'は、剃刀コードです - あなたが見る前にサーバー上で評価されます。サーバー側のコードによっては、それが変更されただけで「魔法のように」更新されません。更新された値をクライアントに返す必要があります。 –

+0

'public ActionResult GetWaiting()'メソッドはmvcの 'Controller'クラスを継承する' HomeController() 'クラスブロックの中になければなりません。セッションはあなたのアクションメソッド内に設定する必要があります。あなたのコードにいくつかのタイプミスがあります。 – stom

+0

@StephenMueckeちょうど私の質問を更新しました。 –

答えて

1

public ActionResult GetWaiting() 
{ 
    //I get userId with some other data from db and set to session 
    //but for the sake of simplicity i set here to 10. 
    Session["getSession"] = "10"; 
    var data = Session["getSession"]; 
    return Json(data, JsonRequestBehavior.AllowGet); 
} 

以下のように値を返したスクリプトアサインにセッションの値を返します。

success: function (data) { 
    $('#session').text(data); 
} 
+0

私の実際のコードで私の質問を更新しましたできるだけ早く。 –

+0

@ErtanHasani、この回答はうまく動作し、値10をクライアントに返します。あなたは 'html'要素の値を設定できます。 – stom

+0

しかし、なぜ私は本当に必要なのは、別のメソッドで設定されている現在のsessionValueを取得することだけです。だからGetWaitingはvar data = Session ["getSession"]のみでなければならず、そのデータを取得するとnullを返します。 –

関連する問題