2010-07-13 80 views
0

我試圖通過jQuery傳遞存儲在我的ASP.NET頁面的Session對象中的變量,表示在服務器上以百分比運行的進程的進度。使用jquery從ASP.NET頁面訪問會話數據

即:

Session['progress'] = 37; 

我已經通過這裏的一些答案看着;我的代碼使用相同的方法aswered正確這裏一個問題:

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

的ASP.NET編譯器返回一個NullPointerException。我不確定這是否因爲Session對象還沒有實例化(因爲這是在編譯時發生的);或者Session對象沒有正確接收變量(如果是這種情況,我該如何去檢查這個問題?)

任何想法?

我需要找到一些方法來將此值從服務器傳遞到客戶端,以便可以爲用戶更新jQuery進度欄。

謝謝!

回答

0

使用

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

將數據輸出到HTML頁面

+0

我已經這樣做了,但是當頁面編譯時我得到一個NullPointerException? – icecreamsoop 2010-07-14 09:05:13

2

我想你是誤會中發生的事情的順序。當SageNS發現你的錯誤時,他沒有解決你的問題。

你有簡單的代碼寫了許多的JavaScript代碼,用戶可以看到:

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

到的UpdateProgress連續()的調用將始終返回37

您需要使用jQuery的。如果要定期更新服務器的進度,ajax()函數可以對服務器進行異步調用。

+0

儘管只能對靜態webmethod進行Ajax調用,但無法訪問存儲在非靜態對象中的任何數據。 我需要通過靜態方法訪問已存在的對象中存儲的數據 - 這是我不太確定的。 – icecreamsoop 2010-07-14 09:04:26

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(); 
     } 
    } 
} 
+0

我已經試過這種方法;我收到以下錯誤: 「CS0120:非靜態字段,方法或屬性需要對象引用'System.Web.UI.Page.Session.get'」 – icecreamsoop 2010-07-14 09:02:30

+0

您可以使用'Session [「progress 「]的ToString();」在靜態WebMethod中? – 2015-03-11 10:25:49

+0

靜態方法會話,你是怎麼做到的? – 2017-05-17 05:52:04

1

可以蓄客扎卡里的答案,並把它更進一步通過創建一個WCF服務和切換您的$。阿賈克斯()呼叫是GET而不是POST。它不會像請求中的那麼大(不是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調用setTimeout()到$阿賈克斯()方法,您定期檢索來自WCF服務的服務器的進度。

祝你好運!

相關問題