【问题标题】:Pass Data string using ajax to controller method使用 ajax 将数据字符串传递给控制器​​方法
【发布时间】:2013-08-10 10:23:37
【问题描述】:

我正在创建一个过滤器列表。我有几个多选列表,用户可以在其中选择多个选项。问题是我使用 ajax 返回值并调用一个控制器方法,该方法将返回一个 Json 数据,然后将其显示在网站上。但问题是它不起作用。

控制器方法:

[HttpPost]
public ActionResult FilterData(string a, string b, string c, string d){
  //Do Something with the strings e.g. filter the data.
  return Json(result, JsonRequestBehavior.AllowGet);
}

Ajax获取过滤数据的方法:

$(document).ready(function() {
$("#submitBTN").click(function() {
var ab = $('#selectedID1').val();
var bc = $('#selectedID2').val();
var cd = $('#selectedID3').val();
var de = $('#selectedID4').val();

$.ajax({
       contentType: "application/json; charset=utf-8",
       url:"/Controller/FilterData",
       type: "POST",
       data: JSON.stringify({a: ab, b: bc, c: cd, d:de }),
       success: function(result){

       } 
       error: function(){}
     });
       return false;
      });
   });

使用 firebug 我可以看到发布了正确的值。而且我知道,如果我通过 url 链接手动选择字符串 a,它会得到正确的过滤数据。但是,这些数据似乎没有进入方法并输出所有数据,而无需使用 postes 值进行过滤。

问题是发布的数据没有被收集或发送到方法FilterData,因此如果没有选择过滤器选项,它会返回所有数据。我想知道如何修复代码,以便获取 ajax 发布的数据以将该数据发送到方法 FilterData 参数,例如字符串 a、字符串 b、字符串 c 和字符串 d。

【问题讨论】:

  • 至少尽量避免示例中的拼写错误。右括号和引号等
  • ajax错误没有返回任何内容?
  • @user1938460:经过几次编辑......现在你成功后只缺少逗号。

标签: javascript jquery ajax asp.net-mvc


【解决方案1】:

更新:现在,当您重述问题时,这是有问题的行(您在数据值上使用 JSON.stringify):

data: { a: ab, b: bc, c: cd, d: de }

您将数据转换为 1 个 JSON 字符串,这不是 MVC 所期望的。

"{"a":1,"b":2,"c":3,"d":4}"

相反,它需要键值对(正常的回发格式):

a=1&b=2&c=3&d=4

所以现在没有错别字的完整示例:

$(document).ready(function () {
    $("#submitBTN").click(function(){
        var ab = $('#selectedID1').val();
        var bc = $('#selectedID2').val();
        var cd = $('#selectedID3').val();
        var de = $('#selectedID4').val();

        $.ajax({
            url: '/MyController/FilterData',
            type: 'POST',
            data: { a: ab, b: bc, c: cd, d: de },
            success: function(result) {

            },
            error: function() {
            }
        });
    });
});

如果只是 POST 请求,则不需要 JsonRequestBehavior.AllowGet(尽管它不会破坏任何内容)。

【讨论】:

  • 改变语法并没有什么不同。语法没有错误。它只是没有将值传递给 ActionResult 方法参数。所以它只是返回所有数据。
  • 好吧,当我使用上面的示例时,它传递了数据。你忘了告诉我们什么吗?您的环境与您给出的示例不同吗?给我 AJAX 调用发送数据的确切 URL。
  • Hi Nenad 使用断点和智能感知方法参数中的字符串值为空,因此它将返回所有数据。确切的 URL 是 url 'Project/FilterData'
  • "data:..." 代码中的行调用 JSON.stringify。删除它!
  • 哦,谢谢。但它不起作用,得到这个错误:无效的 JSON 原语:a,
【解决方案2】:

尝试:

url:'/Controller/FilterData',

【讨论】:

  • 这只是 OP 示例中的一个错字,这不是解决方案。
  • 抱歉忘记添加“”。但它并没有什么不同。在发布数据并调用该方法时。但是返回的 json 没有被过滤,因为它没有得到发布的数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 2018-06-12
  • 2017-03-11
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多