繁体   English   中英

服务器端重定向后jQuery对话框不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM