0

我有一个 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 对话框调试技巧,我们也将不胜感激。

4

4 回答 4

1

该问题似乎是由我的对话框使用的扩展功能引起的,该功能将 jQuery 对话框定位到页面的表单部分,以确保服务器端回发能够正常工作。我更改了此代码的行为,改为简单地关闭对话框,然后使用以下命令手动调用服务器端回调

<%= this.Page.ClientScript.GetPostBackEventReference(btnAgree, "") %>;
于 2009-02-14T23:08:33.757 回答
0

不幸的是,我不能说任何可能的原因,但是在您的位置上,我尝试从一些调试代码开始,使用诸如控制台和断点之类的Firebug工具。也许会发生某种 var 初始化或类似错误。希望这个技巧能对你有所帮助。

于 2009-02-12T00:07:49.367 回答
0

您可能做错了几件事。

首先是对话框的初始化,你把它放在这里了吗?在

$(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(就像 Hotmail 所做的那样,以便您在其网站上阅读电子邮件),您可以使用 Session 对象或您可以想到的其他方法关于。

这只是为了让您更好地了解您可以完成的工作。

于 2009-02-12T09:52:39.537 回答
0

当我们从页面发送请求时,jquery 脚本成功执行,但是当我们在发送重新查询的同一页面上进行响应时,jquery 脚本没有执行。这就是你的弹出窗口不显示的原因

于 2009-02-25T10:48:12.780 回答