MVC Ajax得到复杂类型总是得到空值

时间:2016-08-17 11:00:13

标签: ajax asp.net-mvc asp.net-mvc-4

我试图从我的控制器向方法发出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');
        }
    });

调用该方法,在第二个参数(周长)中,我得到正确的值但不是我的复杂类型方法。

有人知道会出现什么问题吗?

3 个答案:

答案 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');
            }
        });