2016-07-27 6 views
0

私のJQuery関数が実行されるとき、グローバル変数をコンソールに書き出して、何かがあることを確認します。 24個のJSONオブジェクトがあります。私のJQuery関数がコントローラにnull JSON文字列をポストしているのはなぜですか?

しかし、関数がこのグローバル変数をサーバーにPOSTしようとすると、メソッドは、私が探している24個の項目の代わりにnull JSONオブジェクトを取得しています。

$("#dismissBtn").on('click', function() 
{ 
    console.log(attendeeClassesGlobal); 
    alert("Check the console"); 
    // Dismiss button has been clicked, so let's deal 
    // with the classes for this attendee 
    $.ajax({ 
     url: "/Class/DismissAttendeeFromAllClasses/", 
     type: "POST", 
     data: { attendeeClassesGlobal, __RequestVerificationToken: $('input[name=__RequestVerificationToken]').val() }, 
     dataType: "json", 
     success: function (attendeeClasses) { 

     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
      if (xhr.responseText !== "") { 
       alertify.alert(xhr.responseText); 
       alertify.error(xhr.responseText); 
      } 
     } 

    }); 
}); 

私はこの機能を呼び出しているコントローラのメソッドで設定されたブレークポイントを持っている:

はここでjQueryの機能です。受信JSONパラメータをチェックするとnullです。なぜ私は理解できないのは、グローバル変数がJQuery関数内に24個のオブジェクトを持っているが、nullが渡されている理由です。ここではPOSTを扱う私のC#の方法があります:

public ActionResult DismissAttendeeFromAllClasses(string json) 
{ 
    if (!Employee.CurrentUser.CanEditAttendees) 
    { 
     throw new ArgumentException("You are not authorized to perform this action"); 
    } 

    var attendeeClasses = JsonConvert.DeserializeObject<IList<AttendeeClassViewModel>>(json); 

    foreach (var attendeeClass in attendeeClasses) 
    { 
     Console.WriteLine(attendeeClass); 
    } 

    return this.Json(null); 
} 

だから、私はPOSTハンドラにJSONのobectを送ってる方法を推測していることは間違っています。誰かが私がここで間違っていることを指摘してくれることを願っています。

編集:皆様、ご意見ありがとうございます。私は無用にそれらを試してみました。参考までに、これは開発ツールのコンソールにグローバル変数を記録するときの私のグローバル変数の外観です。私はそれに何かを見ることができない

Console output

、多分私は何かが欠けている:あり24個のオブジェクトは、この配列内にありますか?

EDIT#2:JSON.stringifyでさえも役に立ちませんでした。私のJSONオブジェクトはコンソールでうまく見えるようになりましたが、文字列jsonは、私が期待している24個のJSONオブジェクトではなく、常にヌルであるため、コントローラメソッドにはなりません。

EDIT#3:パラメータ名が一致していないようです。 ajax/mvcの新規投稿では、この要件を認識していませんでした。これで私の問題は解決しました。アドバイスをいただきありがとうございました!

+1

データペイロードをJSON.stringify、つまりデータ:{JSON.stringify(attendeeClassesGlobal)、__RequestVerificationToken:$( 'input [name = __ RequestVerificationToken]')。val()}を通じて実行してみてください。 –

+0

JSON形式。 'attendeeClassesGlobal'に' __RequestVerificationToken: 'と同じようなプロパティ名を与えてみてください – mmcrae

答えて

0

コントローラメソッドのパラメータの名前と一致しないjQueryのポスト関数のパラメータ名でcontentType: "application/json; charset=utf-8"を含みます。これが修正されると、問題は解決されました。

0

コントローラでオブジェクトのパラメータを定義しないで、文字列を送信する代わりにシリアライザでオブジェクトをマッピングさせる理由は何ですか?

public ActionResult DismissAttendeeFromAllClasses(IEnumerable<MyViewModel> json) 
{ 
    //Do stuff 
} 

編集:

コレクションを送信しているとして、あなたはそれに応じて、コントローラを更新する必要があります。

も要求

関連する問題