Tôi có cuộc gọi jQuery ajax mà tôi đang cố gắng gửi ID int của người dùng có thể được chọn từ một bảng hộp kiểm.MVC với cuộc gọi jQuery Ajax không liên kết chính xác mảng trống/số
Tôi gặp sự cố với trường hợp không có người dùng nào được chọn. Tôi mong đợi một mảng trống nhưng trên thực tế, tôi nhận được một mảng có độ dài = 1, chứa userId 0 (tức là một giá trị int chưa được gán).
Đoạn sau tái tạo vấn đề
$('#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;
}
Các Khẳng định thất bại vì numbers
là List<int> { 0 }
. Tại sao sự ràng buộc xảy ra như thế này?
Mã này được chút bối rối, bạn đang thiết số "1" tức là numbers.Count() là 1. Nhưng lý tưởng khi không có người dùng nào được chọn, các số.() nên lý tưởng là "0". Và sau đó khẳng định của nó là thất bại. Điều này có đúng không? –
Bạn có thể thử thay đổi sau trong phương thức hành động của mình và xem liệu điều đó có hiệu quả hay không. Thay thế IEnumerable bằng IList. Xem nếu nó hoạt động, nếu có, sau đó tôi sẽ thêm một câu trả lời chi tiết cho bài đăng này. –
Số là một mảng có độ dài 0 là 1s. Thay đổi từ 'IEnumerable' thành 'IList' sẽ không tạo ra bất kỳ sự khác biệt nào. – fearofawhackplanet