簡體   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