我在ASP.net MVC中遇到AJAX控制器问题。我有一个应用程序发送与AJAX的地理坐标到ASP.net MVC控制器。这些坐标是双倍的,但是当我将它们作为double发送时,控制器返回错误页面。但是当我将坐标作为整数发送时,控制器会返回正确的结果。
ERROR:
The parameters dictionary contains a null entry for parameter 'latitude' of non-nullable type...
这有效:
function()
{
$.post(url,
{
"latitude" : 28,
"longitude" : 64,
"distance" : 100
},
function(data)
{
...
}
);
}
这不是:
function()
{
$.post(url,
{
"latitude" : 28.457,
"longitude" : 64.574,
"distance" : 100
},
function(data)
{
...
}
);
}
Controler:
[HttpPost]
public JsonResult GetPlaces(float latitude, float longitude, float distance)
{
/* data mining */
return Json(jsonPlaces.ToList());
}
答案 0 :(得分:2)
我认为这是一个本地化问题,因此您需要将值更改为逗号分隔,或者您需要在mvc应用程序上声明本地
这是逗号更改代码的点
var lati = 2.24;
var latitude = lati.replace (/\./g, ',');
请尝试它也许它会解决
答案 1 :(得分:1)
您在控制器中使用哪种数据类型? 我做了一些非常相似的事情,就像你正在尝试的那样,确实有效。我使用的是.net 十进制数据类型。此外,请确保使用的是相同的变量名称(区分大小写)
这是适用于我的ASP.net MVC控制器代码:
public ActionResult SaveColumn(string ID, decimal Value, string comment)
{
//...
}
这就是我在JavaScript中调用它的方式:
$.ajax({ url: "SaveColumn?ID=" + id + "&Value="+val+"&comment="+comment, cache: false, success: function (data, textStat, jqXHR) { ... }});
答案 2 :(得分:0)
如果今晚与DateTime有这个问题。原来是本地化问题。我怀疑你的也是。例如,serverside期望5.5,但从客户端收到5,5。
答案 3 :(得分:0)
谢谢,这是一个本地化问题,这有效:
$.post(url,
{
"latitude" : "49,81",
"longitude" : "12,44",
"distance" : distance
},
function(data)
{
...
}
);
有没有选项如何在指定的控制器方法上禁用本地化格式(特别是对于参数),但仍然在视图中使用它们?
答案 4 :(得分:0)
我在Web.config中使用Globalization解决了同样的问题。