我正在调用ajax方法,如下所示
var srchText = "Chicago";
$.ajax({
url: "/Ajax/GetCities",
data: "{'srchText' : '" + srchText + "'}",
dataType: "json",
type: "POST",
async: false,
contentType: "application/json; charset=utf-8",
dataFilter: function (data) { return data; },
success: function (data) {
cityList = data.d;
}
});
url指向MVC控制器,如下所示,
[HttpPost]
public ActionResult GetCities(string srchText)
{
List<City> result = new List<City>();
EventsBIZ objBIZ = new EventsBIZ();
result = objBIZ.ToList<City>(objBIZ.GetCities(srchText));
return this.Json(new GetEventsResponse() { d = result }, JsonRequestBehavior.AllowGet);
}
代码有问题,该方法被成功调用,但srchText将为null。请帮我弄清楚wat出错了。提前致谢
添加从firebug跟踪的请求。
答案 0 :(得分:4)
您的代码不起作用的原因是因为默认情况下ASP.NET MVC 2不会理解 JSON
请求。没有任何内置允许您发送JSON格式的请求,并且此请求被解析回强类型操作参数。默认情况下,此功能是从ASP.NET MVC 3开始内置的。请查看following blog post。如果要在ASP.NET MVC 2下完成此工作,则需要实现JsonValueProviderFactory
。
而不是:
data: "{'srchText' : '" + srchText + "'}",
你应该使用:
data: JSON.stringify({ srchText: srchText }),
JSON.stringify
原生适用于现代浏览器,对于较旧的浏览器,您可能需要包含json2.js
。
如果您不想实现JsonValueProviderFactory
,另一种可能性是使用默认模型绑定器可以理解的标准application/x-www-form-urlencoded
请求:
$.ajax({
url: '/Ajax/GetCities',
data: { srchText: srchText },
type: 'POST',
async: false,
dataType: 'json',
dataFilter: function (data) { return data; },
success: function (data) {
cityList = data.d;
}
});
答案 1 :(得分:1)
您不必将srchText
作为json
发送,因为您只需发送一个字符串即可将其作为查询字符串发送
试试这个
var srchText = "Chicago";
$.ajax({
url: "/Ajax/GetCities",
data: 'srchText=' + srchText ,
type: "POST",
async: false,
dataFilter: function (data) { return data; },
success: function (data) {
cityList = data.d;
}
});
答案 2 :(得分:0)
我认为您没有传递有效的JSON,请尝试使用:
data: {"srchText" : srchText},