我需要使用jQuery将4个参数(3个字符串和1个逗号分隔列表)从ASP.NET页面传递到另一个ASP.NET页面。目标页面应该作为单独的窗口启动,它可以与以下jQuery代码段一起使用:
$('#sourcePageBtn').click(function(){
window.open("destinationPage.aspx");
return false;
});
如何将参数传递到目标页面?我试图避免查询字符串传递参数,因为:
我不想在目标窗口中显示url参数(也可能很长)。
有一些特殊字符,如',/,\,&字符串参数中的等等。
请建议。
修改 我正在尝试访问aspx文件的脚本部分中的参数,即。
<script language="C#" runat="server">
protected void Page_Load ( object src, EventArgs e)
{
//Creating dynamic asp controls here
}
</script>
我对脚本部分的Page_Load中的参数的特殊需要源于我在Page_Load中创建一些依赖于这些参数的动态图表控件。
欢呼声
答案 0 :(得分:5)
对大数据而不是GET使用POST。使用POST时,不会将querystring用于数据,因此URL长度限制不是问题。 (浏览器的最大URL长度不同,因此当大数据移动时,您可以远离它。)
特殊网址字符可以encoded在查询字符串中传递,因此不应该是个问题。
或者,您可以从第一页将数据存储在服务器端,然后让第二页从服务器端获取数据。但这太过分了。它会让你做不需要的服务器编程。
通过HTTP调用传递状态是标准做法。你不应该试图绕过它。使用它。所有设施都为您而建。现在由jQuery提供一些帮助......
注意: 在浏览器中禁用JavaScript时,请小心使用jQuery作为主要应用功能。在大多数情况下,即使禁用JavaScript,您的Web应用程序也应该可以在基本级别使用。在这之后,在JavaScript / jQuery上进行分层,以使体验更加出色,甚至令人敬畏。
解决方案实施的关键资源是:
工作原理:从主页面发生POST,结果显示在弹出窗口中。它按此顺序发生:
实际上,我们已将数据发布到弹出窗口并将参数传递给处理。
接下来是三页,它们构成了完整的解决方案。我把所有3个放在我的桌面上,它适用于谷歌Chrome稳定版3.0.195.38。其他浏览器未经测试。您还需要jquery-1.3.2.js位于同一文件夹中。
<强> main_page.html 强>
这是您提供的逻辑的扩展。 Sample使用链接而不是表单按钮,但它具有相同的id=sourcePageBtn
。
此示例在POST发生时传递两个键/值对(仅作为示例)。您将在此处传递您选择的键/值对。
<html>
<head>
<script type="text/javascript" src="jquery-1.3.2.js"></script>
</head>
<body>
<a id="sourcePageBtn" href="javascript:void(0);">click to launch popup window</a>
<script>
$(function() {
$('#sourcePageBtn').click( function() {
// Open popup window if not already open, and store its handle into jQuery data.
($(window).data('popup') && !$(window).data('popup').closed)
|| $(window).data('popup', window.open('popup.html','MyPopupWin'));
// Reference the popup window handle.
var wndPop = $(window).data('popup');
// Waits until popup is loaded and ready, then starts using it
(waitAndPost = function() {
// If popup not loaded, Wait for 200 more milliseconds before retrying
if (!wndPop || !wndPop['ready'])
setTimeout(waitAndPost, 200);
else {
// Logic to post (pass args) and display result in popup window...
// POST args name=John, time=2pm to the process.aspx page...
$.post('process.aspx', { name: "John", time: "2pm" }, function(data) {
// and display the response in the popup window <P> element.
$('p',wndPop.document).html(data);
});
}
})(); //First call to the waitAndPost() function.
});
});
</script>
</body>
</html>
<强> popup.html 强>
这是从主页面定位的弹出窗口。您将在主页面的jQuery脚本中看到对popup.html的引用。
最后加载弹出窗口DOM时,这里有一个“技巧”来设置window['ready'] = true
。主脚本一直在检查并等待,直到弹出窗口准备就绪。
<html>
<head>
<script type="text/javascript" src="jquery-1.3.2.js"></script>
</head>
<body>
<!-- The example P element to display HTTP response inside -->
<p>page is loaded</p>
</body>
<script>
$(function() {
window['ready'] = true;
});
</script>
</html>
process.aspx.cs(C# - ASP.NET process.aspx页面)
主页面脚本将参数发布到的动态服务器页面。 AJAX参数到达Page.Request集合。 对于此示例,输出将作为纯文本传回,但您可以自定义应用程序要求的响应。
public partial class process : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
// Access "name" argument.
string strName = Request["name"] ?? "(no name)";
// Access "time" argument.
string strTime = Request["time"] ?? "(no time)";
Response.ContentType = "text/plain";
Response.Write(string.Format("{0} arrives at {1}", strName, strTime));
}
protected override void Render(System.Web.UI.HtmlTextWriter writer) {
// Just to suppress Page from outputting extraneous HTML tags.
//base.Render(writer); //don't run.
}
}
结果显示在原始/主页面的弹出窗口中。
因此,弹出窗口的内容将被"[name] arrives at [time]"
主要参考文献:HTTP Made Really Easy,jQuery Ajax members and examples.
答案 1 :(得分:0)
如果在打开它时保留对新窗口的引用,即var destWin = window.open(...)
,则可以访问destWin窗口对象上的变量和方法。或者,您可以使用window.opener
从目标窗口“返回”。