使用jquery从ASP.NET页面访问会话数据

时间:2010-07-13 16:20:42

标签: asp.net jquery session-variables

我正在尝试使用jQuery传递存储在ASP.NET页面的Session对象中的变量,以百分比形式表示在服务器上运行的进程的进度。

即:

Session['progress'] = 37;

我在这里看了一些答案;我的代码在这里正确使用了与问题相同的方法:

<head>
...
    <script type="text/javascript">  
        function updateProgress() {
             var progress = '<%Session["progress"].ToString();%>';
        } 
    </script>
...
</head>

ASP.NET编译器返回NullPointerException。我不确定这是否因为Session对象尚未实例化(因为这是在编译时发生的);或者Session对象可能没有正确接收变量(如果是这种情况,我该如何检查它呢?)

有什么想法吗?

我需要找到一些方法将这个值从服务器传递到客户端,以便为用户更新jQuery进度条。

谢谢!

4 个答案:

答案 0 :(得分:3)

如果您想使用jQuery从页面中的会话变量获取实时更改数字,则需要进行某种类型的ajax请求。要访问会话状态中的值,可以编写函数[WebMethod]以将数据发送/发送回jQuery请求。

jQuery请求:

jQuery.ajax({
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: '{}',
    dataType: 'json',
    url: 'Default .aspx/TestMethod',
    success: function(result){
        alert(result.d);
    }
});

服务器页面WebMethod:

using System;
using System.Web.Services;

namespace JqueryAjaxText
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        [WebMethod]
        public static string TestMethod()
        {
            return Session["progress"].ToString();
        }
    }
}

答案 1 :(得分:2)

我认为你误解了事情发生的顺序。虽然SageNS发现了您的错误,但他没有解决您的问题。

您只需将代码写入javascript代码,用户就会看到:

<head>
...
    <script type="text/javascript">  
        function updateProgress() {
             var progress = '37';
        } 
    </script>
...
</head>

对updateProgress()的连续调用将始终返回37。

如果要定期更新服务器的进度,则需要使用jQuery的.ajax()函数对服务器进行异步调用。

答案 2 :(得分:1)

您可以通过创建WCF服务并将$ .ajax()调用切换为GET而不是POST来构建Zachary的答案并更进一步。它不会是一个大的请求(不是POST那么大),但你也将使用正确的HTTP动词。 (POST用于插入; GET应该用于检索数据)。

您的jQuery调用可能如下所示:

jQuery.ajax({ 
    type: 'GET', 
    dataType: 'json', 
    url: 'MyService.svc/GetServerProgress', 
    success: function(result){ 
        alert(result.d); 
});

然后,您将创建一个WCF服务并创建一个名为GetServerProgress的服务方法。

    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetServerProgress")]
    public int GetServerProgress()
    {
        return 37;
    }

最后,您可能希望客户端使用一些JavaScript调用{.1}}到您的$ .ajax()方法,以便定期从WCF服务检索服务器的进度。

祝你好运!!

答案 3 :(得分:0)

使用

<%=Session["progress"].ToString()%>

将数据输出到html页面