我是法国人,抱歉我的英语不好。
我有一个缓慢的ASP.NET方法为我生成一个文件:
public ActionResult Method([Bind(Prefix = "Id")] Guid id)
{
//Long work
return File(data, "application/pdf", doc.Name + ".pdf");
}
在我的cshtml文件中有一个按钮(我使用Razor):
<a title="Télécharger" onclick="DownloadFile('@entity.Id')"/>
脚本方法:
<script>
function DownloadFile(id) {
var url = '@Url.Action("Method", "TheController", new { id = "Id" })'.replace('Id', id);
$("#divLoading").show();
$.post(url, null,
function (data) {
$("#divLoading").hide();
});
}
</script>
divLoading:
<div id="divLoading" style="margin: 0px; padding: 0px; position: fixed; right: 0px;
top: 0px; width: 100%; height: 100%; background-color: #666666; z-index: 30001;
opacity: .8; filter: alpha(opacity=70);display:none" >
<p style="position: absolute; top: 30%; left: 45%; color: White;">
Génération du document...<img src="../../Content/img/ajax-loader.gif">
</p>
</div>
调用C#方法,divLoading出现并消失但文件未被导航器下载。
如果我写道: 它的工作。 但装载机并不存在。我想要。
我的问题不是如何在下载文件时制作加载程序,而只是在下载开始之前显示加载程序。
感谢。
答案 0 :(得分:0)
您无法如此直接地执行此操作,因为响应未发送到浏览器。
作为替代方案,你可以做2个这样的请求:
public ActionResult Method([Bind(Prefix = "Id")] Guid id)
{
//Long work
string newGuid = Guid.NewGuid().ToString();
TempData[newGuid] = data;
return Content(newGuid);
}
public ActionResult Download(string guid)
{
byte[] data = (byte[])TempData[guid];
return File(data, "application/pdf", "teste.pdf");
}
脚本方法:
function DownloadFile(id) {
var url = '@Url.Action("Method")';
$("#divLoading").show();
$.get(url,
function (data, textStatus, jqXHR)
{
$("#divLoading").hide();
window.location.href = '@Url.Action("Download")'
+ '?guid=' + data;
}
);
}