2

私は次のWORKINGコードを持っています:

クラス (宣言されたオブジェクト)

public class saveRow
{
    public int proId { get; set; }
    public string proName{get;set;}
}

コントローラ:

[HttpPost]
public virtual JsonResult SaveRow(saveRow input)
{ /* CODE HERE */}

JavaScript オブジェクト (送信済み)

var test = {"proId" : 1, "proName" : "Test"}

JavaScript Ajax 呼び出し

 $.ajax({
       type: "POST",
       url: "URL",
       dataType: "json",
       data: test,
       traditional: true,
       success: function (data, status, request) {
           if (data.Error != undefined) {
               alert("System Error: " + data.Error);
               $(row).find('*').attr('disabled', false);
               return;
           }

       },
       error: function (request, status, error) {
           console.log("ERROR");
       }
   });

一度に1行ではなく行のリストを送信したいときに問題が発生するので、次のようにしました。

テストするために、同じオブジェクトを取得して完了しました

var test2 = []; test2.push(test); test2.push(test);

オブジェクトは次のようになります。

[{"proId" : 1, "proName" : "Test"},{"proId" : 1, "proName" : "Test"}]

私のコントローラーは次のようになります:

  [HttpPost]
    public virtual JsonResult SaveRow(List<saveRow> input)
    { /* CODE HERE */}

またIEnumberable、オブジェクトのリストを JSON として送信すると、変数の入力が常に null になります。

しかし、コントローラーパラメーター「入力」を介してこのリストを送信するたびに、常にnullになります。

どうしてこれなの?

解決済み-

public virtual JsonResult SaveRow(saveRow[] input)

そして追加されたコンテンツタイプ!JSON.stringify で!

4

1 に答える 1

1

この方法を試してください:

  • 引数名「input」と同じリストのラッパー名を設定します
  • コンテンツ タイプの設定
  • 従来を削除し、JSON.stringify を使用してデータを文字列化します。

JS:

var data = { "input": test2 };

$.ajax({
       type: "POST",
       url: "URL",
       dataType: "json",
       contentType:"application/json; charset=utf-8", //<--Set content Type
       data: JSON.stringify(data), //Set data
       success: function (data, status, request) {
           if (data.Error != undefined) {
               alert("System Error: " + data.Error);
               $(row).find('*').attr('disabled', false);
               return;
           }

       },
       error: function (request, status, error) {
           console.log("ERROR");
       }
   });
于 2013-10-14T15:09:23.660 に答える