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方法において
あなたのスクリプト内の@Session ["getSession"] 'は、剃刀コードです - あなたが見る前にサーバー上で評価されます。サーバー側のコードによっては、それが変更されただけで「魔法のように」更新されません。更新された値をクライアントに返す必要があります。 –
'public ActionResult GetWaiting()'メソッドはmvcの 'Controller'クラスを継承する' HomeController() 'クラスブロックの中になければなりません。セッションはあなたのアクションメソッド内に設定する必要があります。あなたのコードにいくつかのタイプミスがあります。 – stom
@StephenMueckeちょうど私の質問を更新しました。 –