将数据从ajax函数传递给mvc4方法

时间:2014-11-07 11:37:35

标签: javascript c# jquery ajax asp.net-mvc-4

我正在使用C#和jQuery创建一个简单的MVC4应用程序。在此应用程序中,当用户按下id为SaveCheckboxChanges的按钮时,我想通过ajax使用jQuery将两个数据数组发送到服务器。

然后由服务器读取这些数据数组并进行相应处理。

控制器方法:

[HttpPost]
public ActionResult UpdateCheckBoxes(string requiresSetupArray, string disabledArray){
    return Json("chamara", JsonRequestBehavior.AllowGet);
}

Javascript jQuery代码:

$("#SaveCheckboxChanges").click(function (event) {
            if (!$("#SaveCheckboxChanges").hasClass("disabled")) {
                var requiresSetupArray = [0, 1, 2];
                var disabledArray = [4, 5, 6];

                $.ajax({
                    url: '/Material/UpdateCheckBoxes',
                    type: 'POST',
                    contentType: 'application/json; charset=utf-8',
                    data: JSON.stringify({requiresSetupArray: requiresSetupArray, disabledArray: disabledArray }),
                    success: function (data) {
                        alert("Success ")
                    },
                    error: function () {
                        alert("error");
                    }
                });
            }
        });

到目前为止的问题是,即使正确调用控制器中的方法,参数也始终为null! 我错过了什么?为什么我的Ajax方法没有提供信息?

2 个答案:

答案 0 :(得分:1)

您可以尝试更改控制器方法参数,然后将AJAX传统参数设置为true:

[HttpPost]
public ActionResult UpdateCheckBoxes(int[] requiresSetupArray, int[] disabledArray){
    return Json("chamara", JsonRequestBehavior.AllowGet);
}

<强>的Javascript

$("#SaveCheckboxChanges").click(function (event) {
     event.preventDefault();
     if (!$("#SaveCheckboxChanges").hasClass("disabled")) {
         var requiresSetupArray = [0, 1, 2];
         var disabledArray = [4, 5, 6];

         $.ajax({
             url: '/Material/UpdateCheckBoxes',
             type: 'POST',
             contentType: 'application/json; charset=utf-8',
             dataType: 'json',
             traditional: true,
             data: JSON.stringify({
                requiresSetupArray: requiresSetupArray, 
                disabledArray: disabledArray 
             }),
             success: function (data) {
                alert("Success " + checkBoxesNumber)
             },
             error: function () {
                alert("error");
             }
        });
    }
});

答案 1 :(得分:0)

不是在Controller中有两个字符串作为参数,而是可以让一个C#对象包含两个两个数组作为方法中的in参数。对象将自动由发布数据的值填充。类似的东西:

public class Something
{
    public List<int> RequiresSetupArray {get;set;}
    public List<int> DisabledArray {get;set;}
}