2017-12-27 10 views
3

質問タイトルが示唆しているように、$ajaxを呼び出して配列のコレクション(必要に応じて配列の配列)をポストしようとしています。コントローラ。私は主題で見つけることができるすべての質問の近くで回ったが、私はそれが機能するように見えない、モデルは単にバインドされません。JSON.stringify()ModelBindingがnullモデルを返す

クラスエンティティにバインドできるのは良いことですが、配列の配列を処理できるだけで解決できますが、それでも動作しないようです。私は配列をコントローラのパラメータで '配列'として読み込むことができません。

HTML変数とページが、チェックボックスの潜在的に多数(> 500)は、バック用のコントローラにあるチェックボックスごとに2つのユニークな参照ですべての値を(偽の値が含まれている)送信する必要があるクエスト処理。 2つの一意の参照は、チェックボックスのidの一部であり、配列に追加される前に分離されます。

$ajaxコールを介してMVCビューから転記問題は、データは、コントローラが応答しchkBoxクラスエンティティの適切な数を初期化するが、クラスのインスタンスのプロパティを満たさない(JSON.stringify()介して)文字列化されます。 (つまり、私はn個すべてのフィドラーは値がJSON形式で掲載を取得し、私は自分を書いた場合、私は値が実際に渡されるので、値は、ストリームに表示しますmodelbinderことを確認しnull

に設定されているすべてのプロパティを持つchkBoxエンティティを取得します

3つの値の1つのセットをコントローラに渡すと同じことになりますが、3つの値のセットを1つの配列として渡すと、コントローラは単一のchkBoxエンティティで応答しますが、すべて3つのプロパティ値をnullに設定します。

Jav(不正な動作を生成1)

[SerializableAttribute] 
public class chkBox 
{ 
    String unqReference_01 { get; set; } 
    String unqReference_02 { get; set; } 
    String IsChecked { get; set; } 

    public chkBox() 
    { 

    } 
} 
:JS「chkBoxオブジェクトの

function chkBox(unqReference_01, unqReference_02, boolean) { 
    this.unqReference_01 = unqReference_01; 
    this.unqReference_02= unqReference_02; 
    this.IsChecked = boolean; 
} 

Javascriptを

var _chkBoxes = []; 

$("input:checkbox[name^='chkCompetitor']").each(function() { 
    if (_chkBoxes.length < 5) { 
     var splitID = $(this).attr('id').split("_"); 
     var entry = new chkBox(splitID[1], splitID[2], true); 
     if (_chkBoxes.indexOf(entry) == -1) { 
      _chkBoxes.push(entry); 
     } 
    } 
}); 

//Submit _chkBoxes 
var updateMatrix = $.ajax({ 
    type: "POST", 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    //traditional: true, 
    url: '/Processing/updateMatrix', 
    data: JSON.stringify(_chkBoxes)   
}); 

ビューでオリジナルのクラスを作成するascript機能


EDIT:ソリューション(あまりにも簡単です)

すべてのクラスプロパティをpublicに設定してください。

、編集されたクラス:

[SerializableAttribute] 
public class chkBox 
{ 
    public String unqReference_01 { get; set; } 
    public String unqReference_02 { get; set; } 
    public String IsChecked { get; set; } 

    public chkBox() 
    { 

    } 
} 

コントローラー:

[HttpPost] 
public JsonResult UpdateMatrix(General.chkBox[] chkBoxes) 
//public JsonResult UpdateMatrix(IEnumerable<General.chkBox> chkBoxes) 
//public JsonResult UpdateMatrix(string IsChecked, String unqReference_01, String unqReference_01) 
{ 

    return null; 
} 

使用:

  • ASP.NET MVC 5.2.3
  • EF 6.2.0
  • のjQuery 3.2.1

読む&が試み:

ヘッダスクリーンショット

ヘッダは、クラス&プロパティの実際の名前を使用して、特性が両端に一致することに注意してください(すなわち、

+0

Chromeコンソールを開くと、リクエストに実際に何が送信されていますか? –

+0

こんにちは@CamiloTerevinto、 FireFox(またはChrome)を主に使用していますが、Fiddlerでリクエストをチェックすると、次のヘッダが表示されます。 POST/Processing/updateMatrix HTTP/1.1 ホスト:localhost:44352 ユーザエージェント:Mozilla/5.0(Windows NT 6.1; Win64; x64; rv:57.0)Gecko/20100101 Firefox/57.0 受け入れる:application/json、text/javascript、*/*; q = 0.01 受け入れ言語:en-US、en; q = 0。5 Referer:https:// localhost:44352/Processing/ProcessEvent/c1cf6457-eb61-434a-98f9-0137d384 __RequestVerificationToken: コンテンツタイプ:application/json;文字セット= UTF-8 X--で要求:コメントとして投稿するには長すぎるように私は、ヘッダーからいくつかのテキストを削除しましたXMLHttpRequestの – mtholen

+0

。 – mtholen

答えて

0

@BrianRogersが最も有用なコメントを与えた uBoatKey = unqReference_01 uDivisionRaceKey = unqReference_02

enter image description here)JSONでクラスで、クラスには、そのプロパティが '単に'

String unqReference_01 {get; set;}

として宣言されていますそれは明らかにあるはずです

public String unqReference_01 {get; set;}

コメントは@BrianRogersに寄せられます。