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

时间:2015-05-18 11:09:48

标签: c# jquery asp.net pageload

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

以下是我在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
}

但我得到的总是&#39; null&#39;。

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

我想在page_load之前隐藏变量的值。 我怎么能得到它?

2 个答案:

答案 0 :(得分:1)

  

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

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

所以,当您尝试使用args Page_load事件已经完成时,将$('#hdnArgs').val(window.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发送数据。

答案 1 :(得分:0)

确认:

  • hdnArgs位于首页
  • 首页在窗口中打开新页面
  • 当那个页面打开时(但是没有完成,当你碰巧以100ms的间隔看它时会发生...如果它比那更快就不会发生),输入#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

解析它