Javascript 返回控制器中带有警报的内容
我试图在某种程度上复制我在中看到的,特别是在中看到的,但不完全相同。 我的意图是,如果zip没有文件(可能发生这种情况,因为文件夹可能是空的),我希望返回一个警报,以便警告用户此时无法获取文件。 但是我缺少重定向点,我不希望警报将用户重定向到引用操作的空白页面,我希望它留在页面中,这也是由于一些过滤器。 这可能吗?我找不到任何可以阻止重定向发生的东西 以下是我的操作控制器代码:Javascript 返回控制器中带有警报的内容,javascript,c#,asp.net-mvc,Javascript,C#,Asp.net Mvc,我试图在某种程度上复制我在中看到的,特别是在中看到的,但不完全相同。 我的意图是,如果zip没有文件(可能发生这种情况,因为文件夹可能是空的),我希望返回一个警报,以便警告用户此时无法获取文件。 但是我缺少重定向点,我不希望警报将用户重定向到引用操作的空白页面,我希望它留在页面中,这也是由于一些过滤器。 这可能吗?我找不到任何可以阻止重定向发生的东西 以下是我的操作控制器代码: public ActionResult DownloadZip(List<int> things)
public ActionResult DownloadZip(List<int> things)
{
// Create zip with files
if (!zip.Any())
{
return Content(@"<script language='javascript' type='text/javascript'>
alert('Message');
</script>
");
}
// Return zip
}
如果您在这里执行重定向,那么一旦确定zip文件为空,就太晚了。您最好的选择可能是下载AJAX文件。不过,请记住,这将要求浏览器支持HTML5文件API,因此IE 9及以下版本将被淘汰
$.ajax({
url: url,
async: false,
xhrFields: {
responseType: 'blob'
},
success: function (data) {
var a = document.createElement('a');
var url = window.URL.createObjectURL(data);
a.href = url;
a.download = 'myfile.pdf';
a.click();
window.URL.revokeObjectURL(url);
}
});
本质上,这是通过AJAX请求zip文件。一旦收到文件数据,就会向DOM中添加一个锚链接(不可见),并动态“单击”以近似用户单击指向静态文件的链接的行为。换句话说,一旦AJAX请求成功完成,就会弹出下载提示。但是,这段代码只消除了重定向的需要。仅当zip文件中有内容时,您仍然需要有条件地弹出下载。有两种方法可以做到这一点
success
回调中,您可以将代码包装在一个条件中,该条件检查data.size>0
。然而,这实际上可能不起作用。我从未看过空的zip文件,但二进制文件中完全可能存在文件头,这会导致blob实际大小大于零,即使它是“空的”error
处理程序。在该处理程序中,您可以通知用户没有下载,因为zip将是空的根据我的理解,警报将用户重定向到空白页,因为在JavaScript中,您有行<代码>窗口.Orth.HeRF= URL;<代码>可能会再次重定向到显示警报的相同操作
因此,请尝试为window.location.href提供不同的url 例如:window.location.href='../somecontroller/someaction'代码>
谢谢
Karthik在那里使用的window.location.href=url
用于调用操作并发送必要的Id以获取要包含在zip中的相关文件,因此在我尝试使用警报之前会发生这种情况。让Guardin回答我,“dat怎么样”!现在,我们面临的问题正是一些客户端的浏览器版本,因为他们的许多专业人员仍在使用Windows XP计算机。因此,我们需要记住IE仍在8版或更低版本中使用。我已经做了2个。点,给出一个404错误来通知未找到创建zip的文件。可能会回到那个解决方案,因为它是最好的解决方案。
$.ajax({
url: url,
async: false,
xhrFields: {
responseType: 'blob'
},
success: function (data) {
var a = document.createElement('a');
var url = window.URL.createObjectURL(data);
a.href = url;
a.download = 'myfile.pdf';
a.click();
window.URL.revokeObjectURL(url);
}
});