jQuery ajax呼び出しで、チェックボックスのテーブルから選択できるユーザーのint IDを送信しようとしています。jQueryを使ったMVC Ajax呼び出しが空の配列/列挙体を正しくバインドしない
ユーザーが選択されていない場合に問題があります。空の配列が必要ですが、実際にはuserId 0(つまり、割り当てられていないint値)を含むlength = 1の配列を受け取ります。
次のスニペットは、numbers
がList<int> { 0 }
であるため、アサートが失敗する問題
$('#test').click(function() {
var numbers = $('.noElements').map(function() {
// (selector does not match any elements, to demonstrate)
return 1;
}).get();
$.ajax({
url: '/MyController/Test',
type: "GET",
data: { numbers: numbers, count: numbers.length }
});
});
public ActionResult Test(IEnumerable<int> numbers, int count)
{
Assert(numbers.Count() == count);
return null;
}
を再生します。なぜバインディングはこのように起こっていますか?
コードは少し混乱して、あなたはすなわちnumbers.Count「1」に番号を設定している - あなたはthis-
さらに情報や代替ソリューションのため、この質問を参照してくださいのような何かをした場合あなたのコードは動作します()は1ですが、理想的には、ユーザーが選択されていない場合、numbers.Count()は理想的には「0」になります。そしてその時の主張は失敗しています。これは正しいです ? –
アクションメソッドで次の変更を試して、それが動作するかどうかを確認できますか? IEnumerableをIListに置き換えます。それがうまくいくかどうかを見てください。そうすれば、私はこの投稿に詳細な回答を追加します。 –
数値は0の長さの1の配列です。 'IEnumerable'から' IList'に変更しても違いはありません。 – fearofawhackplanet