【问题标题】:pass data from client side to server before page_load executes在 page_load 执行之前将数据从客户端传递到服务器
【发布时间】:2015-05-18 20:56:51
【问题描述】:

html 页面上的按钮使用window.open() 命令重定向到 aspx 页面。 在page_load 执行之前,我希望在aspx 页面的服务器端的html 页面上有某些数据。

以下是我在 html 页面上的代码,它重定向到 aspx 页面

var win = window.open('mypage.aspx','_self');
win.args=this.Args;

以下是我在 aspx 页面上的代码,它试图捕获从 html 页面传递的数据

<script type='text/javascript'>

 var readyStateCheckInterval = setInterval(function () {
            if (document.readyState === "loading") {
                $('#hdnArgs').val(window.args);
                clearInterval(readyStateCheckInterval);
            }
        }, 100);

</script>

<input type='hidden' id='hdnArgs' runat='server'/>

以下是 aspx.cs 文件中的代码,它试图读取从 html 页面的数据中设置的隐藏变量的值

protected void Page_Load(object sender, eventargs e)
{
    string data = hdnArgs.value; //this is always null
}

但我得到的总是'null'。

readyStateCheckIntervalpage_load事件完成后设置隐藏变量值。

我想要page_load 之前的隐藏变量的值。 我怎样才能得到它?

【问题讨论】:

  • 您的 Jquery 是否为该 HiddenField 返回了正确的值?
  • 好的。现在如果你想在Page_Load 之前使用它,你可以在PageLoad 之前运行的Page_Init 方法中尝试它。不知道行不行,你可以试试看。
  • 无法访问“Window”变量服务器端。它必须在客户端并将值存储在一些文字或隐藏变量中才能在服务器端访问它

标签: c# jquery asp.net pageload


【解决方案1】:

在页面生命周期结束之前不能设置任何控件的值。

让我解释你.. 您尝试在 hdnArgs 上设置值,但在页面生命周期控制中仅在完成 ​​Page_init,Page_Load,Page_Load_Complete 后才生成并将其发送到浏览器 所有这些方法..

所以,当您尝试使用已完成的 $('#hdnArgs').val(window.args); Page_load 事件将 args 值设置为 hdnArgs 时..

解决方案

我认为您需要将值作为 QueryString 传递以获取 Page_load 中的值

var win = window.open('mypage.aspx?Args='+this.Args,'_self');

在 ASPX 页面中

protected void Page_Load(object sender, eventargs e)
{
string data = Request.QueryString["Args"];
}

如果您有大量数据,您也可以使用 Page Postback 发送数据。

【讨论】:

    【解决方案2】:

    确认:

    • hdnArgs 在起始页上
    • 起始页在窗口中打开一个新页面
    • 当该页面打开时(但不完整,当您碰巧以 100 毫秒的间隔查看它时希望会发生这种情况......如果它比这更快,它不会),input#hdnArgs 被更新为 a 值从打开的页面
    • Page_Load 位于起始页上
    • 您希望起始页 Page_Load 从弹出窗口中获取值

    您需要查看 asp.net 页面的生命周期,例如:https://msdn.microsoft.com/en-gb/library/ms178472%28v=vs.100%29.aspx

    当启动页面甚至考虑处理任何 javascript 时,启动页面的 Page_Load 早已不复存在。

    也许,在 Page_Load 中,您可以直接加载新页面,例如使用

    var content = new System.Net.WebClient().DownloadString(contentUrl);
    

    并将其解析为#hvnArgs

    【讨论】:

    • hdnArgs 和 page_load 在目标页面上。不在源页面上
    • 这就是我添加“确认”的原因,因为“以下是我在 aspx 页面上的代码”另有说明。无论哪种方式,Page_Load 在页面发送到浏览器之前发生,因此在任何客户端脚本运行之前。如果您希望将值传递给弹出窗口的 Page_Load,只需将它们传递到 URL window.open('mypage.aspx?args=xxx'...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    相关资源
    最近更新 更多