Tôi đang cố gắng gửi một số dữ liệu JSON đến phương thức hành động điều khiển ASP.NET MVC3 của tôi, nhưng nó sẽ không hoạt động bất kể tôi làm gì.ASP.NET MVC gửi dữ liệu JSON đến một Action Controller
Đây là cuộc gọi ajax của tôi (nó sử dụng phương pháp JSON.stringify từ json2.js):
$.ajax({
url: '/Home/GetData',
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8;",
data: JSON.stringify(filters_data),
success: function (data) {
alert(data);
}
});
Các Fiddler cho thấy yêu cầu như thế này:
POST http://localhost:51492/Home/GetData HTTP/1.1
Host: localhost:51492
Connection: keep-alive
Content-Length: 171
Origin: http://localhost:51492
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
Content-Type: application/json; charset=UTF-8;
Accept: application/json, text/javascript, */*; q=0.01
Referer: http://localhost:51492/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
{"Filters":[{"Field":3,"Operator":0,"Values":["30.01.2012.","30.01.2012."]},{"Field":2,"Operator":0,"Values":["-1"]},{"Field":0,"Operator":0,"Values":["some-string"]}]}
My C# code:
[HttpPost]
public string GetData(QueryFilters filters)
{
return "Ho ho ho and a bottle of rum.";
}
[Serializable]
public enum Fields
{
A,
B,
C,
D
}
[Serializable]
public enum FilterOperator
{
Is,
Between,
GreaterOrEqual,
}
[Serializable]
public class QueryFilter
{
public Fields Field { get; set; }
public FilterOperator Operator { get; set; }
public List<string> Values { get; set; }
}
[Serializable]
public class QueryFilters
{
public List<QueryFilter> Filters { get; set; }
}
Tôi đã thêm dòng sau vào phương thức Application_Start() của global.asax.cs:
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
Điểm ngắt trong phương thức hành động 'GetData' bị trúng, nhưng giá trị của thuộc tính Bộ lọc bị vô hiệu. Bất kỳ ý tưởng?
Lưu ý khác: Tôi đã thử truyền một đối tượng đơn giản hơn nhiều: Tên chuỗi thuộc tính Person và int Age, với cùng một kết quả - có vẻ như ràng buộc mô hình tự động không hoạt động đối với tôi nhưng tôi không biết làm thế nào để kiểm tra nó.
+1 Cũng được phát hiện. Tôi không thể tìm thấy thứ tôi đã tham chiếu trong câu trả lời của tôi, vì vậy đã xóa nó ... –
Cảm ơn bạn rất nhiều! Tôi không thể giải thích tôi cảm thấy thất vọng như thế nào, thử hàng tỉ thứ khác nhau và hóa ra lại là một vấn đề đặt tên đơn giản. – skali
Tuyệt vời tất cả các cách, tôi đã được tìm kiếm xa và gần cho điều này, nhưng tất nhiên, đó là trên stack! –