帮助Ajax post to action方法

时间:2011-09-28 19:36:40

标签: asp.net-mvc ajax post response actionlink

我是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发布选中的值?

提前致谢!

托比。

2 个答案:

答案 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();
});

还可以查看以下博客文章。它可能会扩大你的想法:

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