Khi tôi gửi một danh sách các int với jQuery như thế này:Làm thế nào để gửi một danh sách các int với jQuery để ASP.net MVC Mặc định Mẫu Binder
$.ajax('@Url.Action("Execute")', {
type: 'POST',
data: {
pkList: [1,2,3]
}
});
Sau đó, jQuery sẽ làm thay đổi đối tượng pkList và gửi nó bằng cách gửi như thế này:
pkList[]:1
pkList[]:2
pkList[]:3
nào sẽ là tốt nếu máy chủ là PHP nhưng tôi sử dụng Asp.NET MVC3 và cố gắng để có được những giá trị này với mô hình mặc định binder:
public ActionResult Execute(ICollection<int> pkList)
Nhưng pkList luôn luôn là null, có vẻ như các mô hình mặc định chất kết dính không thể ràng buộc nó.
Làm cách nào để giải quyết vấn đề này một cách chính xác?
THÊMSOLUTION
tôi đã sử dụng giải pháp từ Darin Dimitrov với thiết lập các tùy chọn trong traditional
jQuery:
$.ajax('@Url.Action("Execute")', {
type: 'POST',
traditional: true,
data: {
pkList: [1,2,3]
}
});
Bây giờ jQuery không thêm []
các thông số và chúng được gửi như sau:
pkList:1
pkList:2
pkList:3
Và trình kết nối mô hình mặc định MVC nhận giá trị chính xác.
Hy vọng điều này sẽ giúp ai đó.
Sẽ không có người mẫu binder mặc định cũng xử lý danh sách phân tách bằng dấu phẩy của dữ liệu được mã hóa biểu mẫu? Một cái gì đó như 'dữ liệu: {pkList: '1,2,3'}'? Nhưng nếu không tôi sử dụng phương pháp này cho tất cả các serialization mô hình của tôi, con đường để đi cho các đối tượng phức tạp hơn trong JS. –
@PaulT., Không, trình kết nối mô hình mặc định sẽ không chấp nhận 'dữ liệu: {pkList: '1,2,3'}'. Nếu bạn muốn xử lý các yêu cầu như vậy, một bộ mô hình tùy chỉnh sẽ là cần thiết, nơi bạn sẽ cần phải phân chia các mục và sau đó phân tích mỗi một trở lại một số nguyên.Sẽ không cần thiết phải trải qua nỗi đau này nếu mục đích là gửi một mảng các số nguyên đến một hành động điều khiển. –
ah vâng tôi thấy ý của bạn bây giờ, chỉ cần kiểm tra nó, mặc dù nó là lạ bởi vì nếu bạn có hai đầu vào với cùng tên nó thực sự deserialize đó vào một danh sách, chỉ cần serialization của jQuery để hình thành dữ liệu bài không xử lý đó (tức là pkList = 1 & pkList = 2 works) –