Ajax Post返回发送两个数组作为参数

时间:2012-09-28 12:02:50

标签: c# jquery asp.net-mvc

我有一个动作方法,它有两个字符串数组作为参数,我发布这个动作方法与ajax post方法,我有一个问题,在控制器上我得到两个数组数据相同 但我正在使用不同的数据制作两个数组(一个包含其他包含名称的代码) 下面是我的代码

 public ActionResult SectionBook(string[] cs,string[] cname)
{
}

var CourseSection=new Array();
var CourseName=new Array();
 $('a p-button').live('click', function () {    
        var schoolCourseId = $(this).attr('id');
        CourseSection.push(schoolCourseId);
        CourseName.push($(this).html().split("(")[0]);        
    });


 $('#btnSubmit').live('click', function () {

$.ajax({
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: '/MyController/SectionBook',
            //            dataType: 'json',
            data: $.toJSON(CourseSection, CourseName),
            success: function (result) {                
                window.location.href = '/MyController/SectionBooks'
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
                alert(thrownError);
            },
            async: false,
            cache: false
        });

});

我调试了JS代码,这两个数组在这里有不同的值,但在控制器cs和cname中包含相同的数据

5 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

尝试不使用contentType:' application / json; charset = utf-8',你没有在服务器端的任何地方指定它,所以mvc尝试在发布时使用来自请求主体的defalut绑定。因此,只需将js对象作为数据参数传递,jQuery将在此请求的主体中使用必要的对象表示执行常见的post请求。

$.ajax({
        type: 'POST',
        url: '/MyController/SectionBook',
        data: {cs: CourseSection, cname: CourseName},
        success: function (result) {                
            window.location.href = '/MyController/SectionBooks'
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.status);
            alert(thrownError);
        },
        async: false,
        cache: false
    });

答案 2 :(得分:1)

我认为问题是toJSON方法只接受一个参数而忽略其余参数。所以通过做      $ .toJSON(CourseSection,CourseName) 您只是使用传入的第一个数组的值创建JSON对象。 如果你将2个数组包装成对象,那就像这样

var CourseSection = new Array();
var CourseName = new Array();
CourseSection.push("cs1");
CourseSection.push("cs2");
CourseSection.push("cs3");

CourseName.push("cn1");
CourseName.push("cn2");
CourseName.push("cn3");

var newObj = {
 cn:CourseName,
 cs:CourseSection        
};

然后使用

将newObj对象转换为JSON
JSON.stringify(newObj)

 $.toJSON(newObj)

您应该能够使用JavascriptSerializer

从控制器中的两个数组中检索值

答案 3 :(得分:0)

尝试这个

var data = { courseSection:CourseSection.toString(),courseName:CourseName.toString()};
            $.ajax({
                url:'/MyController/SectionBook',
                type:'GET',
                data:data,
                async:false,
                success:function(data)
                {
                    window.location.href = '/MyController/SectionBooks'

                }
            });
        }


In Controller
public ActionResult SectionBook(string courseSection,string courseName)
{

}

只需确认befor ajax调用您的数组是否包含不同的值。在json中你应该在密钥对中传递值,在控制器中你将获得这些值作为逗号分隔符。

答案 4 :(得分:0)

问题出在data: $。toJSON(CourseSection,CourseName),` 它用第一个元素填充它们检查文档