2016-08-17 2 views
0

Я пытаюсь получить запрос на получение метода от моего контроллера, но я всегда получаю нулевые значения внутри местоположения параметра.MVC Ajax получает сложный тип, всегда получая нулевые значения

Моя модель:

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)); 
    } 

И мой Аякса вызов

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

'данные: JSON.stringify ({userLocation: {Lat: "0", Long: "11"}, периметр: диапазон}),' (и удалить '[FromUri]') –

+0

Я попробовал ваш решение, и проблема остается, я попытался добавить периметр в класс UserLocation и все тот же. – Jose

+0

Просто заметили, что у вас есть другие проблемы. Вы можете просто сделать это 'data: {Lat: 0, Long: 11, perimeter: 22},' но его метод GET, поэтому вы также должны указать 'return Json (...., JsonRequestBehavior.AllowGet);' –

ответ

0

У вас должно быть Stringify со стороны клиента и Deserialize со стороны сервера.

стороне клиента:

JSON.stringify(loc); 

стороне сервера:

public JsonResult getLocations(JsonObject json, int perimeter) 
{ 
    JavaScriptSerializer js = new JavaScriptSerializer(); 
    var c = js.Deserialize<MyClass>(json); 
} 
+0

it не работает. – Jose

0

вы можете использовать JsonRequestBehavior для AllowGet

return Json(LocationsHandler.getLocations(userLocation, perimeter),JsonRequestBehavior.AllowGet); 
+0

Спасибо, я добавил его, но я думаю, что это позволит вернуть json. – Jose

0

Проверьте и сказать, если он не приста к. Я думаю, что вам не хватает contentType и неправильный тип данных.

  $.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'); 
      } 
     }); 
Смежные вопросы