2012-04-27 52 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

相关问题