我已经看到了很多有关如何将Session变量放入淘汰赛的问题,但是没有一个问题说明如何从Knockout vm设置一个。我的设置:

-ASPX页面,在该页面上获得Session [“ GridSize”]变量,并将其作为名为currentGridSize的全局变量返回

-VM,在其中获取该全局变量,并设置this.gridSize = globals.gridSize

-Dropdown更改this.gridSize

我需要的:

-设置Session [“ GridSize”] = this.gridSize的某种方法,无论更改还是在离开页面时

我试过了:

-在我的.aspx.vb上使用webmethod函数并进行调用(无法从Shared函数调用会话变量,并且必须共享webmethod)

-从虚拟机调用

最佳答案

通过对页面方法执行以下操作,可以访问ASP.NET AJAX页面方法中的Session

<WebMethod(EnableSession := True)> _
Public Shared Sub StoreSessionValue(sessionValue As String)
    ' Set a value into Session
    HttpContext.Current.Session("TheSessionValue") = sessionValue
End Sub

<WebMethod(EnableSession := True)> _
Public Shared Function GetSessionValue(sessionValueName As String) As String
    ' Get a value from Session
    Return HttpContext.Current.Session(sessionValueName)
End Sub


注意:必须将Session对象完全限定为HttpContext.Current.Session

您可以在视图模型函数内部调用此page方法,如下所示:

$.ajax({
  type: "POST",
  url: "YourPage.aspx/GetSessionValue",
  data: "{'sessionValueName':'sessionValue'}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(data) {
    // Do something with data returned here

  }
});

07-28 10:29