2011-09-21 36 views
4

好吧,我已經完成了我的功課並且發現了類似的線程。但是,我還沒有找到一個好的答案。MVC3 - 文件下載 - 等待狀態指示燈

使用MVC3,C#,Razor View Engine。

我的場景非常簡單。我有一個鏈接調用控制器上的操作的視圖。該操作返回一個動態生成的文件。該過程需要1到10秒的時間。在此期間,我想鎖定UI並顯示「Please Wait」消息。

我第一次嘗試使用這樣的:

@Ajax.ActionLink("my test link", "myAction", new { Controller = "myController" }, new AjaxOptions { OnBegin = "ajaxStart", OnComplete = "ajaxStop" }) 

的ajaxStart和ajaxStop功能,然後使用jQuery的blockUI腳本來阻斷和開啓的UI,並顯示「請稍候」消息。這工作,它顯示的消息,但沒有文件將下載。經過一些更多的研究後,我發現我無法使用Ajax來啓動文件下載。如果我錯了,請賜教。

所以,我回到了正常的ActionLink。這可以工作,我可以下載一個文件。我甚至可以捕獲.click事件並阻止UI並顯示等待消息。但是,我如何知道何時取消阻止用戶界面?如何知道文件保存/打開對話框何時打開?也許如果我能捕捉到這個事件,我可以解除對用戶界面的阻止。

我已經看到了其他文章,推薦一個更復雜的解決方案,將文件生成/下載分解爲單獨的功能。我非常想避免必須將文件保存在服務器上,或者必須輪詢服務器以查看文件是否已完成。這應該相當簡單。

如果有人有任何想法,請讓我知道。

感謝, 託尼

回答

3

有一個後一段時間回來這個對SO: Detect when browser receives file download

它引用此鏈接:http://geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the-file-download-dialog-in-the-browser.aspx

有效它確實是它發送一個cookie(C#生成)與文件(用戶正在下載)到客戶端。一旦客戶端有cookie,理論上這個文件被下載後發生)。 Javascript會檢查客戶端是否有該cookie,如果是這樣的話,Javascript將會阻止用戶界面。

+0

有趣的方法。我會給它一個鏡頭。謝謝! –

+0

我在IDE中運行時遇到了一些麻煩,但是一旦部署到測試服務器上,它運行得非常好。再次感謝! –

+0

很高興爲你工作。 –