2011-11-08 41 views
7

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ì numbersList<int> { 0 }. Tại sao sự ràng buộc xảy ra như thế này?

+0

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? –

+0

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. –

+0

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

Trả lời

1

Tôi tin rằng trình kết nối mô hình mặc định sẽ chuyển đổi chuỗi rỗng được chuyển tới cuộc gọi AJAX của jQuery thành một mảng nguyên chứa một phần tử chứa giá trị mặc định của một số nguyên (0). Mã của bạn sẽ làm việc nếu bạn làm điều gì như this-

$('#test').click(function() { 
    var numbers = $('.noElements').map(function() { 
     return 1; 
    }); 
    if (numbers.length == 0) { 
     numbers = null; 
     count = 0; 
    } 
    else count = numbers.length; 

    $.ajax({ 
     url: '/Home/Test', 
     type: "GET", 
     data: { numbers: numbers, count: count } 
    }); 
}); 

Xem câu hỏi này cho biết thêm thông tin và các giải pháp thay thế - How to post an empty array (of ints) (jQuery -> MVC 3)

+0

Có vẻ như không có hỗ trợ trong MVC để truyền một mảng trống. Cách kỳ lạ. Tôi tự hỏi lý do của họ là gì để thực hiện nó theo cách này, dù sao nó cũng không rõ ràng với tôi. – fearofawhackplanet

+0

Thực ra, tôi phải xóa câu trả lời của mình, nguyên nhân trong trường hợp của tôi ngay cả các mảng không trống đã được đăng theo thứ tự không đúng cách (mvc2) – Bartosz

Các vấn đề liên quan