[英]Trouble sending JSON data to another action in asp.net MVC controller
[英]ASP.NET MVC sending JSON data to a Controller Action
我正在嘗試將一些JSON數據發送到我的ASP.NET MVC3控制器操作方法,但無論我做什么它都無法工作。
這里是我的ajax調用(它使用從該JSON.stringify方法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);
}
});
Fiddler顯示這樣的請求:
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"]}]}
我的c#代碼:
[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; }
}
我已將以下行添加到global.asax.cs的Application_Start()方法中:
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
命中操作方法“GetData”中的斷點,但Filters屬性的值為null。 有任何想法嗎?
另一個注意事項:我嘗試傳遞一個更簡單的對象:Person - 屬性字符串Name和int Age,結果相同 - 看起來好像自動模型綁定對我不起作用但我不知道如何檢查它。
問題是你的action參數被稱為filters
,而你的QueryFilters
模型中有一個名為Filters
的屬性會混淆默認的模型綁定器。
所以只需重命名你的動作參數:
[HttpPost]
public ActionResult GetData(QueryFilters model)
{
return Json("Ho ho ho and a bottle of rum.");
}
哦,請注意,操作應該返回ActionResults而不是字符串。
同時從global.asax中刪除以下行:
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
ASP.NET MVC 3已經內置了這個。
或者,如果您出於某種原因絕對需要將您的操作參數稱為filters
那么您還可以修改要發送到此的JSON請求:
data: JSON.stringify({
filters: {
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"] }
]
}
}),
現在不再有歧義了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.