使用ajax将数据字符串传递给控制器​​方法

时间:2013-08-10 10:23:38

标签: javascript jquery ajax asp.net-mvc

我正在创建一个过滤器列表。我有几个多选列表,用户可以在其中选择多个选项。问题是我使用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。

2 个答案:

答案 0 :(得分: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(虽然它不会破坏任何东西)。

答案 1 :(得分:0)

尝试:

url:'/Controller/FilterData',