2012-04-27 99 views
0

我在javascript中有一個客戶端全局變量。我需要從生活在不同頁面上的服務器端訪問這個全局變量。我怎樣才能實現這個沒有查詢字符串?如果會話狀態需要,那麼我怎麼能從JavaScript設置會話?在javascript中設置httpcontext會話以供服務器端使用

EDITED

確定..這裏是全場景..頁面本身是一個SharePoint網頁,我對Web部件僅控制。在webpart中我有一個按鈕,可以打開另一個頁面window.open。現在我怎樣才能將JavaScript變量從主頁面傳遞到其他頁面,並使其在代碼隱藏中可訪問?

回答

0

我可以想到一些方法來做到這一點,但我會建議你這樣做。基本步驟如下:

  1. 使用JavaScript彈出一個單獨的模態對話框,其中包含要作爲參數傳遞的全局變量(而不是查詢字符串)。

  2. 在彈出頁面中,使用JavaScript將全局變量設置爲隱藏字段,然後啓動對自身的回發。

  3. 在後面的代碼中,從隱藏字段檢索全局變量並將其存儲在會話數據中。

  4. 現在,全局變量在會話空間中可用。

注意:您需要jQuery 1.7.1或更高版本。

第1步代碼:

這是您的彈出式鏈接或按鈕。

<a id="popAspxWeb" href="#" onclick="javascript:PopPage('ModalPopup.aspx','galbal_variable_data');">Click to Popup</a> 

這裏是JavaScript代碼打開彈出窗口。

<script type="text/javascript"> 
    function PopPage(page, data) { 
     var result = window.showModalDialog(
     page, // popup this page 
     data, // with this data 
     "dialogWidth:500px; dialogHeight:500px; resizable:no; status:no; center:yes"); 
    } 
</script> 

第2步代碼:

你需要這些。第一個存儲傳入的數據,第二個標記頁面回發或不存儲。

<input id="hidData" runat="server" type="hidden" /> 
<input id="postback" runat="server" type="hidden" value="false" /> 

這裏的JavaScript的:

<script type="text/javascript"> 
    var data = ""; // global variable to store data from parent window. 

    $(document).ready(function() { //jQuery code to be executed when document is fully loaded. 
     args = window.dialogArguments; // obtain argument data and assign to global variable. 
     if ($("#postback").val().toString() == "false") { // if first visit to page 
      $("#hidData").val(data); // assign argument data from global variable to hidden field. 
      $("#postback").val("true"); // flag the form is posted back. 
      document.forms[0].submit(); // trigger form post. 
     } 
    }); 

    function ReturnAndClose() { // you can optionally return data back to the parent window. 
     window.close(); // this closes modal pop up. 
     window.returnValue = document.getElementById('return_data').value; // this returns a value to parent window. 
    } 

</script> 

步驟3代碼:

代碼behine訪問galbol變量數據。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
    { 
     string data = this.hidData.Value; 
     this.Session["data"] = data; 
    } 
} 
-1

會話是服務器端數據存儲。嘗試使用Cookie。

+0

也可參考這個帖子http://stackoverflow.com/questions/1981673/persist-javascript-variables-across-pages – 2012-04-27 05:30:58

+0

你怎麼能在JavaScript設置會話?使用谷歌搜索,但似乎不可能 – user384080 2012-04-27 05:33:44

+0

正如我前面提到的,你不能在JavaScript中設置會話。 – 2012-04-27 05:36:33

-2

不,不能直接通過JavaScript訪問會話。它存儲在服務器上,而JavaScript在客戶端上運行。 但可以間接完成,請參考答案下面的鏈接

Get Values from Previous Pages using different approaches

的Check Point 4在這上面的鏈接。

我已經解釋過: 跨頁回發,增加控制

希望它成爲你的目的,按您編輯的PostBackUrl屬性。

+0

公牛** t是什麼,如果你有膽量投票然後評論和解釋它爲什麼做? – Murtaza 2012-04-27 06:44:33

+0

隊友..從你的解決方案是從服務器端設置會話..仔細閱讀我的問題..我需要從客戶端設置它! – user384080 2012-04-27 06:55:56

+0

@ user384080 - 我答案的第一行解釋說我們不能從客戶端設置會話。請仔細閱讀答案,然後進行投票。如果您無法找到答案,並且所有答案都表示我們無法直接在JavaScript中訪問會話,那麼我的帖子是正確的,並且不需要對它投票。 – Murtaza 2012-04-27 08:01:25

相關問題