2011-12-08 6 views
1

jQueryからASP.Net MVCコントローラに渡すコードがあり、正常に動作します。私は今、新しい状況で同じ機能を再現しようとしています。コントローラーコードにブレークポイントを設定すると、パラメーターはnullと表示されます。このデータがjQuery AJAXポストからASP.Net MVCに渡されないのはなぜですか?

誰でも以下のコードで何かが間違っているのを見ることができますか?火かき棒で私はcalendarIdsが完全に人口の配列ですが、それがサーバー側でnullとして表示されることがわかります。ここで

は私のjQueryのコードです:今

$.ajax({ 
    url: '/EventCalendar/UpdateVisibleCalendars/', 
    type: 'POST', 
    traditional: true, 
    data: { calendarIds: calendarIds }, 
    dataType: 'html', 
    success: function (data) { 

    } 
}); 

:ここ

var calendarIds = []; 

$('#box2View option').each(function() { 
    calendarIds.push($(this).val()); 
}); 

$.post(
    '/EventCalendar/UpdateVisibleCalendars/', 
    { calendarIds: calendarIds }, 
    function (data) { 
     //do some callback stuff here (not relevant for question) 
    }, 
    "html" 
); 

あなたがtrueにtraditionalフラグを設定することができます私のコントローラのコード

public ActionResult UpdateVisibleCalendars(int[] calendarIds) 
{ 
    // right here i check calendarIds and its always NULL :(
    return null; 
} 
+0

おそらく 'calendarIds = 1,2,3,4,5'を' calendarIds = 1&calendarIds = 2&calendarIds = 3 ... 'と期待しているところに投稿しますので –

答えて

2

使用$.ajax()ですPOST本体は次のようになります:

calendarIds=1&calendarIds=2&calendarIds=3

(jQueryの1.4から始まるデフォルト)POST本体は次のようになります。

calendarIds[]=1&calendarIds[]=2&calendarIds[]=3

そしてthis blog postを調べることによって、あなたが最初のと互換性があることを理解するであろうデフォルトのモデルバインダー。

jQueryのtraditionalフラグは、$.param()セクションで詳しく説明されています。

+0

うん。 。私は今、jQuery.ajaxSettings.traditional = trueを参照してください。私の作業ユースケースに設定されました。 .iは愚かなものがなければならないことを知っていた。 。 – leora

+0

@leora、yeap、だからこそ、あなたはいつもあなたのjsデバッグツール(FireBug、Chrome開発ツールなど)を見て、AJAXリクエスト中に正確に何がサーバにポストされているのかを知っておくべきです。このようなことはすぐに明らかになっています。 –

関連する問題