如何从Javascript调用自定义操作结果

时间:2015-03-26 21:39:51

标签: javascript c# jquery asp.net-mvc

我有一个自定义的ActionResult,我将url字符串传递给它,它会将文件传回给我。我如何从Javascript文件中调用它?由于我必须传递一个字符串,我不认为我可以使用jQuery的$.post().ajax()方法,但我可能错了。我也不能使用Razor的@Html.ActionLink方法,原因涉及到?这是我的代码。

public class ReportResult : ActionResult
{
    private readonly string _fileName;
    public ReportResult(string fileName)
    {
        _fileName = fileName;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        var cd = new ContentDisposition
        {
            FileName = _fileName,
            Inline = false
        };
        var response = context.HttpContext.Response;
        response.ContentType = "application/pdf";
        response.Headers["Content-Disposition"] = cd.ToString();

        using (var client = new WebClient())
        using (var stream = client.OpenRead(_fileName))
        {
            stream.CopyTo(response.OutputStream);
        }            
    }
}

引用它的Controller方法。

public ActionResult DownloadPdf(string filePath)
{
    return new ReportResult(filePath);
}

1 个答案:

答案 0 :(得分:0)

因此我在窗口中打开文件而不是下载时出现问题的原因是由于控制器和Action方法部分的url字符串在传递给location.href之前被切断了Javascript。下面是新的Javascript,它将打开网址并立即下载PDF文件。

location.href = "/Controller/DownloadPdf?filePath=" + pdfUrl;

感谢@SLacks在评论中提供了一些指导。