1
我需要做一個文件下載,在文件處理過程中顯示一個加載圖標(因爲我不知道需要多長時間),我決定要使用iframe,代碼運行良好,但問題是文件下載對話框不顯示。ASP.NET MVC - iframe下載對話框沒有顯示
我已經在IE,Firefox和Chrome中進行了測試,並且它沒有在其中任何一箇中工作。
這裏是我的代碼:
查看:
<table id="progress" style="visibility:hidden">
<tr>
<td>
<img src="~/Content/Images/ajax-loader.gif" />
</td>
<td>
<h4>please wait.</h4>
</td>
</tr>
</table>
<div class="buttons">
<input type="button" value="Ok" class="button" id="downloadButton">
</div>
<iframe id="iframe" style="visibility:hidden"></iframe>
<script>
$(document).ready(function() {
$('#downloadButton').click(function() {
$('#progress').show();
$('input:button').attr("disabled", true);
$('#iframe').src = "@Url.Action("GenerateFile", "Files", null)";
$('#iframe').load("GenerateFile", function() {
$('input:button').attr("disabled", false);
$('#progress').hide();
});
});
});
</script>
服務器端操作:
[HttpGet]
public void GenerateFile(Filters viewModel)
{
var result = GetCustomers().WithName(viewModel.Name);
StringBuilder file = new StringBuilder();
foreach (var customer in result)
{
// fill up the string builder with csv format
}
System.Web.HttpContext.Current.Response.AddHeader("content-disposition","attachment; filename=Customers.csv");
System.Web.HttpContext.Current.Response.ContentType = "application/csv";
System.Web.HttpContext.Current.Response.Write(file);
System.Web.HttpContext.Current.Response.End();
}
任何幫助,將不勝感激,謝謝!
我已經改變了我的服務器端代碼,因爲它肯定看起來更好,謝謝。雖然問題仍然存在......如果我沒有太多要求,如果你能指出你不喜歡我的代碼來幫助我改進它,那將會很棒。 – BrenoSarkis
嗯,它的工作原理,所以我認爲我應該將你的答案標記爲已接受,我只是稍微留意一下,看看我是否有任何其他想法......你已經發現了一個問題,直到我沒有意識到現在,我認爲沒有辦法讓我以這種方式發佈viewModel,我可能不得不嘗試尋找不同的解決方案。 – BrenoSarkis
我注意到的另一件事是,action方法現在被調用了兩次,我想這是因爲設置src屬性使得iframe以jquery的加載方式調用方法,所以我想我不應該混合它們。 – BrenoSarkis