[英]jQuery dialog not working after server-side redirect
我有一个ASP.NET网站,该网站使用jQuery对话框向用户显示下载条件对话框。 用户同意对话框中的条款后,我将执行服务器端回发,发出对另一个网站上负责下载到浏览器的页面的Response.Redirect调用。 问题在于,一旦进行了Response.Redirect调用,就无法再显示该对话框。
我使用以下代码在document.ready事件中初始化对话框:
$("#terms-dialog").dialog({
modal: true,
autoOpen: false,
autoResize: false,
height: 420,
width: 500,
overlay: {
opacity: 0.5,
background: "black"
}
});
显示对话框的代码如下:-
function showTermsDialog(snippetid, title, agreement, url)
{
$("#terms-dialog-text").html(agreement);
$("#terms-dialog-controls").attr("style", "display: block;");
$("#<%= this.SnippetID.ClientID %>").attr("value", snippetid);
$("#<%= this.DownloadUrl.ClientID %>").attr("value", url);
$("#terms-dialog").data("title.dialog", title);
$("#terms-dialog").dialog("open");
}
此代码使我能够成功多次显示对话框,但是在进行Response.Redirect调用后,对dialog(“ open”)的调用将不再起作用。
有没有人做过与我在这里尝试的类似的事情? 另外,如果任何人都可以提供任何jQuery对话框调试技巧,也将不胜感激。
问题似乎是由我的对话框使用的扩展功能引起的,该功能将jQuery对话框放置在页面的表单部分中,以确保服务器端的回发将正常工作。 我更改了此代码的行为,改为简单地关闭对话框,然后使用以下命令手动调用服务器端回调
<%= this.Page.ClientScript.GetPostBackEventReference(btnAgree, "") %>;
不幸的是,我无法说明任何可能的原因,但是在您的位置,我尝试使用控制台和断点之类的Firebug工具从一些调试代码开始。 也许某种形式的var initalization或类似的错误发生。 希望本技巧对您有所帮助。
您可能做错了几件事。
首先初始化对话框,请问您在哪里放置了对话框? 在
$(document).ready( function() { ... } );
如果没有,您应该。 考虑到您确实重定向了用户,并且在该重定向中您将重定向到上一页(具有对话框的页面),因此(document).ready再次启动并初始化对话框。
但是,使用ASP.NET时,您不应该像您正在做的那样,而是为您和用户考虑一个简单的表单。
在jQuery中使用.load可以加载不同的页面,因此让我们假设您在对话框中有一个名为“我同意”的按钮,该按钮向用户提供了所需的文件:
$(document).ready( function() {
$("#terms-dialog").dialog({
modal: true,
autoOpen: false,
autoResize: false,
height: 420,
width: 500,
overlay: {
opacity: 0.5,
background: "black"
},
buttons: {
I do not agree: function() { $(this).dialog('close'); }
I agree: function() {
GetFileIfCookieExist("myfile.xls");
$(this).dialog('close');
}
}
});
});
function GetFileIfCookieExist(file) {
// create cookie here
$.load("getFile.aspx", { "f": file }, function() {
// you can show a "loading" image
});
}
在您的getFile.aspx中,删除除第一行以外的所有HTML代码,然后在Page_Load事件背后的代码中处理请求,并使用Response.Write方法将文档写回,例如:
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=" + Request["f"]);
Response.Charset = "";
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
stringWrite = AppendMyFile();
Response.Write(stringWrite.ToString());
Response.End();
请记住在请求中创建一个cookie,并在aspx页面中检查该cookie(如果不存在),这是因为用户强行下载了该cookie,然后在将文件发送回用户之前删除了该cookie。
Cookie只是确保可信度的一种策略,但这并不是完美无缺的,因为您需要用户启用Cookie(例如Hotmail才能使您在其网站上阅读电子邮件),您可以使用Session对象或其他您认为可以使用的方法关于。
只有这样,您才能更好地了解自己可以完成的工作。
当我们从页面发送请求时,jquery脚本成功执行,但是当我们在发送重新查询的页面上进行响应时,jquery脚本未执行。 这是您的弹出窗口不显示的原因
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.