0

请在标记为重复之前阅读问题。我正在尝试通过使用 Javascript 重定向到我的 ASP.NET MVC3 项目中的控制器操作来下载文件。它在 Firefox 和 IE8 中完美运行。这是我的 Javascript 代码:

<script type="text/javascript">
    $(function(){
        $(".pdf").click(function(e) {
            e.preventDefault();
            $.post("@Url.Action("PDF","Helper")", {id : @Model.ID} ,function(data){
                if(data.message == "File not found.") {
                    alert(data.message);
                } else {
                    location.href = '@Url.Action("PDF", "Helper", new { id = Model.ID })';
                }
            });
        });
    });
</script>

这是我尝试过的:

  1. 我添加return false;了以下所有内容

  2. 我将行更改为:

    window.location.href = "../../Helper/PDF/@Model.ID";
    
  3. 我试过window.location

  4. 我将相对链接更改为完整链接

  5. 试过没有window

  6. 试过:

    setTimeout(function() {
        document.location.href = '@Url.Action("PDF", "Helper", new { id = Model.ID })'
    },500);
    
  7. 我添加了这一行:

    window.event.returnValue = false;
    

    它给出了错误“window.event 未定义”。我用e.

  8. 我改写了“ http://www.google.com ”,但也没有用。但是,它在单独的 html 文件中工作,仅包含location.href = "http://www.google.com";.

所有这些都适用于 IE8 和 Firefox,但不适用于 Chrome。我能做些什么来解决这个问题?

编辑:这是生成的脚本:

$(function(){
    $(".pdf").click(function(e) {
        e.preventDefault();
        $.post("/Helper/PDF", {id : 130405002} ,function(data){
            if(data.message == "File not found.") {
                alert(data.message);
            } else {
                location.href = '/Helper/PDF/130405002';
            }
        });
    });
});

这是生成的 HTML,我在其中调用该函数:

<input class="pdf" type="button" value="Download File" />

调试操作我得到了这些结果;在控制台状态为“失败”。Type正如预期的那样是“应用程序/pdf”并且Size是198 kb,它是文件大小。方法是POST

这是我的控制台输出:

控制台输出

4

1 回答 1

0

我用以下内容更改了脚本:

<script type="text/javascript">
$(function () {
  $(".pdf").click(function () {
    $.get('@Url.Action("PDFAvailable", "Helper")', { id: @Model.ID }, function (data) {
      if(data.message == "File not found.") {
        alert(data.message);   
      } else {
        location.href = '@Url.Action("PDF", "Helper", new { id = Model.ID })';
      }
    }); 
  });
});
</script>

你看,我添加了一个新的控制器动作,它只控制文件是否存在并调用文件动作。这适用于所有浏览器,至少我拥有的那些。我不完全知道,但这可能是 Chrome 中的错误或安全预防措施。

于 2013-05-09T15:32:57.947 回答