0

パラメーターとして 2 つの文字列配列を持つアクション メソッドがあります。このアクション メソッドを ajax post メソッドで投稿しています。1 つの問題があります。コントローラーで両方の配列データを同じにしましたが、両方の配列を異なるデータで作成しています (1 つは含まれています)。 code other contains name) 以下は私のコードです

 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

contentType: 'application/json; なしで試してください。charset=utf-8' の場合、サーバー側のどこにも指定しないため、mvc はポストの場合にリクエスト ボディからのデフォルト バインディングを使用しようとします。したがって、js オブジェクトをデータ パラメーターとして渡すだけで、jQuery は、この要求の本文に必要なオブジェクト表現を使用して一般的な投稿要求を実行します。

$.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 メソッドが 1 つのパラメーターのみを取り、残りを無視することだと思います。したがって、 $.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 に答える
1

これは役立つかもしれません:

ASP.NET MVC と jQuery パート 4 – 高度なモデル バインド

于 2012-09-28T12:31:31.050 に答える
0

問題はdata:$.toJSON(CourseSection, CourseName) にあります。最初の要素でそれらを埋めます ドキュメントをチェックしてください

于 2012-09-28T12:29:30.493 に答える
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 に答える