使用Javascript在ASP.NET MVC控制器操作上通过POST下载文件(HttpPost操作) - c#

最初,我的控制器操作接受GET。当我的数据增长时,我被迫转向POST方法,以便能够发送更大的数据。
我的控制器动作如下:

[HttpPost]
public ActionResult ClausesPdf(MyArrayModel obj)
{
    ...
    return File(pdf, "application/pdf", "file.pdf");
}

如何调用此操作并使用javascript下载文件?

参考方案

更新:我意识到关于AJAX的原始答案并不完全准确,因为无法通过AJAX调用返回文件。我建议您看一下这样的问题:Download Excel file via AJAX MVC。我相信@CSL有一个很好的答案,类似于您想要的。

 我的答案不是纯JavaScript。这是jQuery中的AJAX调用,说明如何在此完成操作:

$.ajax({
    url: urlControllerAction,
    type: 'POST',
    cache: false,
    data: //your parameter data here
})
.done(
    function(result, textStatus, jqXHR) {
        //do something with the "result"
    }
)
    .fail(
        //what should be done if something goes wrong
    );

asp.net使用客户端验证而不发布到服务器 - c#

我有一个很长的表格,分为几个部分。我想利用内置的ASP.NET验证控件而不在提交表单之前将其回发到服务器。为了提供更多的上下文,让我解释一下我的想法。该表格分为几部分,每个部分都有一个“下一步”按钮。单击“下一步”按钮时,将使用ASP.NET包含的客户端代码来验证该部分。如果该部分有效,则jquery方法将隐藏该部分并显示下一个。当用户到达表单的最后部分时,…

ASP.NET持久缓存(“延迟加载”样式吗?) - c#

我在使缓存按我想要的方式工作时遇到了麻烦。问题:检索请求的数据的过程非常耗时。如果使用标准的ASP.NET缓存,则某些用户将承担检索数据的“重任”。这是不可接受的。解决方案?:数据是否为100%当前并不重要。我想提供旧的无效数据,同时在另一个线程中更新缓存的数据,使新数据可用于将来的请求。我认为,数据需要以某种方式持久化,以便能够在应用程序重新启动后为第一个…

ASP.NET Gridview ButtonField onclick触发包含行的onclick事件 - c#

我有一个gridview行,当单击该行时必须执行回发操作A,而在该行中单击该行时必须执行回发操作B的按钮字段。问题是,当我单击按钮字段时,会触发event1和event2。下面是代码。protected void gdv_RowCommand(object sender, GridViewCommandEventArgs e) { string arg = …

Visual Studio,ASP.Net(.Net Framework),并在项目中包含NuGet安装的软件包 - javascript

我在Visual Studio 2017中有一个主要由JavaScript组成的ASP.Net(.Net Framework)MVC Web应用程序。我已经使用NuGet安装了一个软件包(特别是marker-animate-unobtrusive软件包。)文档继续说我应该在我的HTML页面中包含JavaScript,但是在仔细检查了NuGet的内容后,我不确…

java.net.URI.create异常 - java

java.net.URI.create("http://adserver.adtech.de/adlink|3.0") 抛出java.net.URISyntaxException: Illegal character in path at index 32: http://adserver.adtech.de/adlink|3.0 虽然n…