我是MVC的新手,需要一些帮助。
在我看来,我在下面做了一个ajax帖子。
function PostCheckedPdf(e) {
var values = new Array();
$('input:checked').each(function () { values.push(this.value); });
$.post("/UnregisteredUserPreview/DownloadPdfInvoice",
{ checkedList: values });
}
此帖子显示在第三方网格组件(Telerik)内检查的任何复选框的值。 Action方法接收数组并循环遍历每个值,呈现pdf报告并将报告放入附加到Response的ZipStream。在循环之后,zipstream关闭,我返回View();
当通过$ .post调用Action时,它会通过操作方法运行,但浏览器中没有任何操作。
如果我通过动作链接调用Action(带有几个硬编码值而不是传递复选框值),则会下载包含所有pdf的zip文件。
我做错了什么或如何使用ActionLink发布选中的值?
提前致谢!
托比。
答案 0 :(得分:1)
不同之处在于,您的ActionLink正在发出<a>
标记,该标记正在执行GET
操作。浏览器解释响应的内容并打开PDF。
您的jQuery方法正在执行POST
,但对响应没有任何作用,因此会在后台默默抛弃它。
您需要使用返回内容实际执行某些操作,例如将其写入另一个窗口。
var w = window.open('', '', 'width=800,height=600,resizeable,scrollbars');
$.post("/UnregisteredUserPreview/DownloadPdfInvoice",
{ checkedList: values },
function(content){
w.document.write(content);
w.document.close(); // needed for chrome and safari
});
答案 1 :(得分:1)
您正在对服务器进行Ajax调用,客户端代码应该收到返回的结果,这似乎是您没有在那里做的。它应该如下所示:
$.ajax({
type: 'POST'
url: '/UnregisteredUserPreview/DownloadPdfInvoice',
data: { checkedList: values },
success: function (r) {
alert(r.result);
}
});
并假设您的控制器如下所示:
public ActionResult DownloadPdfInvoice() {
//do you stuff here
return Json(new { result = "url_of_your_created_pdf_might_be_the_return_result_here"});
}
注意强>
如果您使用
anchor
标记发布数据,最好是 阻止此标记的默认操作,以便它不会执行任何操作 否则你告诉它要做的事情。你可以通过添加 在click
事件函数结尾处跟随代码:
$("#myLink").click(function(e) {
//do the logic here
//ajax call, etc.
e.preventDefault();
});
还可以查看以下博客文章。它可能会扩大你的想法: