在 page_load 执行之前将数据从客户端传递到服务器

pass data from client side to server before page_load executes

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

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

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'。

readyStateCheckInterval设置page_load事件完成后的隐藏变量值。

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

确认:

  • hdnArgs 在起始页上
  • 起始页在window
  • 中打开一个新页面
  • 当该页面打开时(但未完成,当您碰巧以 100 毫秒的间隔查看它时,希望会发生这种情况……如果速度比这快,则不会),input#hdnArgs 更新为来自打开页面的值
  • 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

解析它

Its not possible to set value of any control before page life cycle finish.

让我解释一下.. 您尝试在 hdnArgs 上设置值,但 In Page 生命周期控件仅在完成 ​​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 发送数据。