2009-02-11 70 views
0

我有一個ASP.NET網站,它使用jQuery對話框向用戶提供下載條款對話框。一旦用戶同意對話框中的條款,我將執行服務器端回發,該回發會向其他網站上的負責將下載內容提供給瀏覽器的頁面發出Response.Redirect呼叫。問題是,一旦進行了Response.Redirect調用,就不能再顯示該對話框。服務器端重定向後jQuery對話框不工作

$("#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"); 
} 

此代碼可以讓我

我使用下面的代碼初始化中的document.ready事件的對話框成功地顯示對話多次,但在進行Response.Redirect調用之後,對話調用(「打開」)不再起作用。

有沒有人做過類似於我在這裏嘗試做的事情?另外,如果任何人都可以提供任何jQuery對話框調試技巧,這些也將不勝感激。

回答

1

這個問題似乎是由我的對話框使用的擴展函數引起的,它將jQuery對話框定位到頁面的表單部分,以確保服務器端回發能夠正常工作。我改變了這種代碼的行爲,而不是簡單地關閉該對話框,然後使用手動調用服務器端回調以下

<%= this.Page.ClientScript.GetPostBackEventReference(btnAgree, "") %>; 
0

不幸的是,我不能說任何可能的原因,但在你的地方,我試着用一些調試代碼作爲控制檯和斷點使用這種Firebug工具。也許某種var initalization或類似的錯誤發生。希望這篇技巧能幫助你一點。

0

有幾件事情你可能做錯了。

首先對話框的初始化,qhere是否引用了它?在

$(document).ready(function() { ... }); 

如果沒有,你應該。考慮到你重定向用戶,並在重定向到重定向到前一頁(有對話框的那個),所以(document).ready被再次啓動並初始化對話框。

但是,使用ASP.NET你不應該這樣做,就像你在做什麼,想想一個簡單的表單,給你和用戶。 jQuery中使用.load

可以加載diferent頁面,讓我們假設你有一個名爲對話框中的按鈕「我同意」,爲用戶提供所需的文件:

$(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代碼,除了第1行,並在代碼隱藏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對象或其他方法你可以考慮一下。

這只是讓你可以更好地瞭解你能完成什麼。

+0

我在$(document).ready中初始化對話框,並以類似於你的建議的方式提供內容,但是一旦下載完成,用戶就不會被重定向回來完成,所以$(document).ready不會再次觸發。我確實有確保對話框再次初始化的邏輯,但是它不幫助您使用UpdatePanel – Cleggy 2009-02-13 02:21:52

0

當我們從一個頁面jQuery的腳本執行成功發送一個請求,但是,當我們採取相同的響應頁面通過我們發送的查詢jQuery腳本不執行。 這就是你彈出不顯示的原因