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