Asp.net ajax与mvc2

时间:2011-06-25 17:53:18

标签: jquery asp.net asp.net-mvc asp.net-mvc-2

我正在调用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跟踪的请求。 FireBug Net monitor

3 个答案:

答案 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},