如何从Javascript调用自定义操作结果
我有一个自定义ActionResult,我将url字符串传递给它,它将流式传输一个文件返回给我。我如何从Javascript文件中调用它?因为我必须传递一个字符串,所以我认为我不能使用jQuery的$.post或.ajax方法,但我可能错了。我也不能使用Razor的@Html.ActionLink方法,原因包括?这是我的密码如何从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;
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,并对其执行任何操作。