Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回控制器中带有警报的内容_Javascript_C#_Asp.net Mvc - Fatal编程技术网

Javascript 返回控制器中带有警报的内容

Javascript 返回控制器中带有警报的内容,javascript,c#,asp.net-mvc,Javascript,C#,Asp.net Mvc,我试图在某种程度上复制我在中看到的,特别是在中看到的,但不完全相同。 我的意图是,如果zip没有文件(可能发生这种情况,因为文件夹可能是空的),我希望返回一个警报,以便警告用户此时无法获取文件。 但是我缺少重定向点,我不希望警报将用户重定向到引用操作的空白页面,我希望它留在页面中,这也是由于一些过滤器。 这可能吗?我找不到任何可以阻止重定向发生的东西 以下是我的操作控制器代码: public ActionResult DownloadZip(List<int> things)

我试图在某种程度上复制我在中看到的,特别是在中看到的,但不完全相同。 我的意图是,如果zip没有文件(可能发生这种情况,因为文件夹可能是空的),我希望返回一个警报,以便警告用户此时无法获取文件。 但是我缺少重定向点,我不希望警报将用户重定向到引用操作的空白页面,我希望它留在页面中,这也是由于一些过滤器。 这可能吗?我找不到任何可以阻止重定向发生的东西

以下是我的操作控制器代码:

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文件中有内容时,您仍然需要有条件地弹出下载。有两种方法可以做到这一点

  • 在AJAX的
    success
    回调中,您可以将代码包装在一个条件中,该条件检查
    data.size>0
    。然而,这实际上可能不起作用。我从未看过空的zip文件,但二进制文件中完全可能存在文件头,这会导致blob实际大小大于零,即使它是“空的”

  • 更好的方法是在zip文件为空时在zip操作中返回错误响应。恕我直言,我不确定最合适的错误响应代码是什么,但400-500范围内的任何代码都可以触发适当的AJAX回调。然后,您只需要向这个AJAX添加和
    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);
        }
    });