【问题标题】:Asp.net ajax with mvc2带有 mvc2 的 Asp.net ajax
【发布时间】:2011-09-22 16:47:11
【问题描述】:

我正在调用如下的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 为空。请帮助我找出 wat 出了问题。提前致谢

添加从 firebug 跟踪的请求。

【问题讨论】:

  • 您的路线是什么样的?你不能使用 ("/Ajax/GetCities/" + srchText) 吗?
  • 更新了萤火虫截图。我想将它作为 json 对象发送,逐渐我想将输入作为一个复杂的类。所以通过网址发送它对我没有帮助。

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


【解决方案1】:

您的代码不起作用的原因是默认情况下 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;
    }
});

【讨论】:

  • 你一针见血。还有一个问题。当我将输入更改为对象而不是字符串,并使用默认模型绑定器时,将向服务器发送一个普通的 javascript 对象。但是对象的属性是默认的(如 int 为 0 和 string 为 null)。知道如何在没有 jsonvalueproviderfactory 的情况下发送对象吗?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    data: {"srchText" : srchText},
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多