0

我有一个动作方法,它有两个字符串数组作为参数,我用 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 中包含相同的数据

4

5 回答 5

1

这可能会有所帮助:

ASP.NET MVC 和 jQuery 第 4 部分 - 高级模型绑定

于 2012-09-28T12:31:31.050 回答
1

尝试不使用 contentType: 'application/json; charset=utf-8',您没有在服务器端的任何地方指定它,因此 mvc 尝试使用请求正文中的默认绑定以防发布。因此,只需将 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
    });
于 2012-09-28T14:40:22.887 回答
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 从控制器中的两个数组中检索值

于 2012-09-28T19:47:03.543 回答
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)
{

}

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

于 2012-09-28T12:28:09.367 回答
0

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

于 2012-09-28T12:29:30.493 回答