我是一个新的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();
当Action通过$。Post在action方法中运行,但在浏览器中什么也没发生。
如果我通过一个Action链接调用Action(使用几个硬编码值而不是传递复选框值),那么包含所有pdf文件的zip文件将被下载。
我做错了什么,或者我怎么能张贴与ActionLink检查值?
提前感谢!
托比。
不同的是,你的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
});
您正在对那里的服务器进行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();
});
也可以看看下面的博文。它可能会开阔你的思维:
http://www.tugberkugurlu.com/archive/working-with-jquery-ajax-api-on-asp-net-mvc-3-0-power-of-json-jquery-and-asp-net-mvc-partial-views