在 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 发送数据。
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 发送数据。