我试图从我的控制器向方法发出get请求,但我总是在参数位置内获取空值。
我的模特是:
public class UserLocation
{
public decimal Lat { get; set; }
public decimal Long { get; set; }
public UserLocation() { }
public UserLocation(decimal lat, decimal lon)
{
Lat = lat;
Long = lon;
}
}
我的控制器的方法是
[HttpGet]
public JsonResult getLocations([FromUri]UserLocation userLocation, int perimeter)
{
return Json(LocationsHandler.getLocations(userLocation, perimeter));
}
我的ajax电话
function getLocations() {
var loc = { location: { Lat: "0", Long: "11" } };
var range = 22;
$.ajax({
url: '/Location/getLocations',
type: 'GET',
dataType: 'application/json;',
data: { location: loc, perimeter: range },
success: function (result) {
alert(result.Data.length);
self.Parametros(result.Data);
},
error: function (xhr) {
alert('error');
}
});
调用该方法,在第二个参数(周长)中,我得到正确的值但不是我的复杂类型方法。
有人知道会出现什么问题吗?
答案 0 :(得分:0)
您必须在客户端字符串化,并在服务器端反序列化。
客户端:
JSON.stringify(loc);
服务器端:
public JsonResult getLocations(JsonObject json, int perimeter)
{
JavaScriptSerializer js = new JavaScriptSerializer();
var c = js.Deserialize<MyClass>(json);
}
答案 1 :(得分:0)
您可以JsonRequestBehavior
使用AllowGet
return Json(LocationsHandler.getLocations(userLocation, perimeter),JsonRequestBehavior.AllowGet);
答案 2 :(得分:0)
检查并判断它是否不起作用。我认为你缺少contentType和错误的dataType。
$.ajax({
url: '/Location/getLocations',
type: 'GET',
dataType: 'json',
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ location: loc, perimeter: range }),
success: function (result) {
alert(result.Data.length);
self.Parametros(result.Data);
},
error: function (xhr) {
alert('error');
}
});