質問タイトルが示唆しているように、$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
読む&が試み:
- MVC3 & JSON.stringify() ModelBinding returns null model
- ASP.NET MVC3 JSON Model-binding with nested class
- ModelBindingContext.ValueProvider.GetValue(bindingContext.ModelName) returns null
- ASP.NET MVC3 JSON Model-binding with nested class
- ModelBinding not deserializing json
- Post JSON array to mvc controller
- https://haacked.com/archive/2011/06/30/whatrsquos-the-difference-between-a-value-provider-and-model-binder.aspx/
ヘッダスクリーンショット
ヘッダは、クラス&プロパティの実際の名前を使用して、特性が両端に一致することに注意してください(すなわち、
Chromeコンソールを開くと、リクエストに実際に何が送信されていますか? –
こんにちは@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
。 – mtholen