2014-02-24 113 views
1

使用JQUERY MVC下載文件。用戶點擊按鈕,我下載文件看起來很簡單。下載文件 - 使用JQUERY的Asp.net MVC

我的jQuery的事件

$(document).on("click", "#download", function() { 
    $.blockUI(); 
    window.location = "../Home/Download"; 
    $.unblockUI(); 
    } 

並叫我服務器端

public ActionResult Download() 
    { 
    return File(); 
    } 

一切都很好,除了正在使用Block UI(jQuery插件),以確保用戶知道正在下載...「請稍等」

,一旦下載完成,我需要取消阻止用戶界面,並讓用戶保存/打開文件。我如何修改上面的代碼來實現這個或任何其他的想法?

當前我的c#代碼被調用,並且jquery中的下一行被執行,並且block ui在下一秒離開。我怎麼能讓這個過程等到下載完成?

回答

1

您不需要window.location。您可以使用jQuery簡單地創建一個iframe,並將其url設置爲您的操作。可以使用解除UI .load方法。 您還需要在您的html中創建一個隱藏容器,該容器將包含iframe,以便它保持隱藏狀態。

<div id="DivIframeContainer" style="display:none;" /> 

$(document).on("click", "#download", function() { 
    $.blockUI();  
var iframe = $("<iframe/>").load(function() { 
    $.unblockUI(); 
}).attr({ 
    src: "../Home/Download" 
}).appendTo($("#DivIframeContainer")); 
    } 
+0

在IE8不工作的問題!任何解決方法? – Peru

+0

你有什麼錯誤嗎? –

+0

不是!只是塊UI凍結!猜解除阻止用戶界面不被稱爲 – Peru

0

你可以通過AJAX調用你的服務器端。以下是關於如何在進行ajax調用時阻止用戶界面的示例。

將Block/Unblock方法附加到$(document).ready函數。每次進行AJAX調用時,UI都將被阻止。

$(document).ready(function() { 

}).ajaxStart(function() { 
    $.blockUI(); 
}).ajaxStop(function() { 
    $.unblockUI(); 
}); 

$(document).on("click", "#download", function() { 
    DownloadFile(); 
} 

function DownloadFile() { 
    $.ajax({ 
     url: "../Home/Download", 
     data: { null }, 
     success: function (data) { 
      //Do something with data that is returned. (The downloaded file?) 
     } 
    }); 
} 
1

用戶與文件下載交互的方式應該留給瀏覽器。

在你的例子中,你的用戶界面會告訴他們文件正在下載,實際上瀏覽器會做同樣的事情。

您只需要使用一個錨設置爲下載位置在href:

<a href="downloadlinkhere"> Download </a> 
+0

正確!但它僅僅是。加載所以有機會,因爲他等待用戶可以再次點擊某事或同一件事tatz WY正在阻塞UI – Peru

+0

對,但是我的意思是,這是一個瀏覽器UX問題,而不是編碼的問題 - 除非有任何具體的如果你點擊兩次,你不希望用戶下載2次,那麼你應該讓瀏覽器做它的事情。 – anthr