繁体   English   中英

带MVC2的ASP.NET AJAX

[英]Asp.net ajax with mvc2

我正在调用如下的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;
    }
});

网址指向一个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监视器

您的代码不起作用的原因是,默认情况下,ASP.NET MVC 2无法理解 JSON请求。 没有内置的组件可以让您发送JSON格式的请求,并且可以将该请求解析回强类型的操作参数。 从ASP.NET MVC 3开始,默认情况下内置此功能。请查看以下博客文章 如果要在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;
    }
});

您不必将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;
}
});

我认为您没有传递有效的JSON,请尝试使用:

data: {"srchText" : srchText},

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM