0

我在javascript中有一个客户端全局变量。我需要从位于不同页面的服务器端访问这个全局变量。如果没有查询字符串,我怎么能做到这一点?如果需要会话状态,那么如何从 javascript 设置会话?

已编辑

好的.. 这是完整的场景.. 页面本身是一个共享点网页,我只能控制 Web 部件。在 webpart 中,我有一个用于打开另一个页面的 window.open 按钮。现在我如何将 javascript 变量从主页传递到另一个页面并使其在代码隐藏中可访问?

4

3 回答 3

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>

第三步代码:

访问 galbol 变量数据的代码隐藏。

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        string data = this.hidData.Value;
        this.Session["data"] = data;
    }
}
于 2012-04-27T15:46:26.227 回答
0

会话是服务器端数据存储。尝试使用 cookie。

于 2012-04-27T05:30:21.350 回答
-1

不,会话不能通过 javascript 直接访问。它存储在服务器上,而 javascript 在客户端上运行。但可以间接完成,请参阅以下链接上的答案

使用不同方法从上一页获取值

检查以上链接中的第 4 点。

我已经解释了:跨页回发,添加控件的 PostBackURL 属性

希望它根据您的编辑服务于您的目的。

于 2012-04-27T05:44:28.767 回答