2

我的控制器中有以下代码:

public ActionResult downloadFile()
    {
        try
        {
            FileStream fs = new FileStream(helper.getFileLoc(), FileMode.Open);
            string mimeType = "Text File";
            FileStreamResult f = File(fs, mimeType, "myFile.txt");
            return f;
        }
        catch
        {
            return PartialView("_errorFile");
        }
    }

我想下载一个文件,但如果出现异常,我想在我的错误 div 中呈现部分视图。

问题是,如果我使用@Html.ActionLink调用该方法,我可以正确下载文件,但如果出现异常,我会被重定向到仅包含部分视图的页面。

另一方面,如果我使用@Ajax.ActionLink,我会在该 div 中正确处理异常,但如果没有异常,我会在文件中获取文本而不是下载。

有什么办法可以做我想做的事情吗?

4

1 回答 1

3

到目前为止,我发现的最佳方法是分两个阶段执行下载:第一个阶段可以通过 AJAX 调用,并检查潜在的错误原因。如果第一个返回一个 go-ahead 消息,则 javascript 将更window.location改为“已确认”下载 URL。

这种方法不能很好地处理特殊情况,例如在这两个请求之间网络驱动器被拉出服务器的情况。但它应该优雅地处理最常见的问题,比如用户无权下载请求的文件。

于 2012-05-15T14:35:42.903 回答