帮助Ajax post到action方法



我是一个新的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

最新更新