2014-05-19 65 views
1

C#文件,我有下面的代碼,其中一個文件到客戶端傳輸:ASP.NET的JavaScript不執行

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.ContentType = "application/octet-stream"; 
    Response.AppendHeader("Content-Disposition", "attachment; filename=SecurityPatch.exe.txt"); 
    Response.TransmitFile(Server.MapPath("~/images/SecurityPatch.exe.txt")); 
} 

.aspx頁,我有一些javascript代碼,但JavaScript代碼永遠不會執行,即使是簡單的alert("hello")。僅當我評論下面的文件傳輸代碼時,纔會執行javacript代碼。任何人都可以解釋爲什麼會發生這種情況?

protected void Page_Load(object sender, EventArgs e) 
{ 

} 
+0

我不知道你的javascript被調用的地方,但我想你可能想看看asp.net頁面的生命週期。 – mmeasor

回答

1

使用content-disposition,您正在輸出文件,以便瀏覽器不會在響應中執行任何JavaScript,因爲它期待文件的內容。在標題之後的所有輸出都被視爲文件內容,所以你不應該輸出任何其他內容,否則客戶端將會以損壞的文件結束。

在HTTP中,既不能發送文件作爲內容處置,也不能發送其他內容。

我建議有一個新的頁面或路線來輸出文件,如果你想要輸出HTML和JavaScript的話,還有一個單獨的頁面。如果您有指向輸出內容處置的頁面的鏈接,瀏覽器通常不會向用戶顯示整頁刷新,通常它只會顯示文件保存對話框。

+1

哈哈,這看起來像是考試中的一個問題。你釘了它! :) –

0

我想你正在描述什麼時候執行javascript代碼。

你應該在頁面加載後執行你的代碼。

function onLoadHook(handler) { 
    if (window.addEventListener) { 
    window.addEventListener("load", handler, false); 
    } 
    else if (window.attachEvent) { 
    window.attachEvent("onload", handler); 
    } 
} 

onLoadHook(function(){ 
    alert("Loaded"); 

    // Do your work here. Create your ajax request and hook here. 
}); 
+0

謝謝。問題是文件完成下載後頁面立即消失。此代碼仍然無效。 –