我有一个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调用后,对话框(“打开”)的调用不再有效。
有没有人做过类似我试图在这里做的事情?或者,如果任何人都可以提供任何jQuery对话框调试技巧,那么这些也将受到赞赏。
答案 0 :(得分:1)
问题似乎是由我的对话框使用的扩展功能引起的,该功能将jQuery对话框定位到页面的表单部分,以确保服务器端回发能够正常工作。我更改了此代码的行为,而只是关闭对话框,然后使用以下
手动调用服务器端回调<%= this.Page.ClientScript.GetPostBackEventReference(btnAgree, "") %>;
答案 1 :(得分:0)
不幸的是,我不能说出任何可能的原因,但是在我的地方,我试图使用诸如控制台和断点之类的Firebug工具开始使用一些调试代码。也许会发生某种变形或类似的错误。希望这个提示会对你有所帮助。
答案 2 :(得分:0)
有些事情你可能做错了。
首先对话框的初始化,你有没有把它打过去?在
$(document).ready( function() { ... } );
如果没有,你应该。假设您重定向用户并在该重定向中重定向到上一页(具有对话框的那个),因此(文档).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
});
}
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(如Hotmail为了您在其网站上阅读电子邮件),您可以使用Session对象或其他方法你可以考虑一下。
这只是为了让您更好地了解自己可以取得的成就。
答案 3 :(得分:0)
当我们从页面发送请求时,jquery脚本成功执行但是当我们在发送requery的同一页面上进行响应时,jquery脚本不会被执行。 这就是你弹出不显示
的原因