Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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#_Jquery_Asp.net Mvc - Fatal编程技术网

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

如何从Javascript调用自定义操作结果,javascript,c#,jquery,asp.net-mvc,Javascript,C#,Jquery,Asp.net Mvc,我有一个自定义ActionResult,我将url字符串传递给它,它将流式传输一个文件返回给我。我如何从Javascript文件中调用它?因为我必须传递一个字符串,所以我认为我不能使用jQuery的$.post或.ajax方法,但我可能错了。我也不能使用Razor的@Html.ActionLink方法,原因包括?这是我的密码 public class ReportResult : ActionResult { private readonly string _fileName;

我有一个自定义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);
        }            
    }
}
引用它的控制器方法

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

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

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

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

不能通过AJAX下载文件。您需要一个常规链接。使用@Html.ActionLinkDownload report,GetPdf,new{filename=http://some.url.toreport.pdf }是立即开始下载?或任何其他形式的导航的唯一方法。这是一个普通的URL。你有什么问题?两件事。首先,url是动态的,所以我需要能够在某些事件发生后更新它。第二,使用ActionLinkMethod会立即开始下载,就像使用链接会尝试在浏览器中打开一样。我仍然不知道你在问什么。您可以构造一个指向您的操作的URL,并对其执行任何操作。