为什么数据在我的控制器中被截断为0?

时间:2018-04-20 16:26:11

标签: c# jquery angularjs asp.net-mvc type-conversion

我正在迁移应用程序,因此此代码已经正常运行。

我有一个角度函数来创建随机avl输入来测试我的api。

$scope.createAvl = function () {
    console.log($scope.avl); // for debug
    $scope.avl.push({
        'tracker_avl_id': getRandomArbitrary(0, 1000000, 1),
        'car_id': getRandomArbitrary(0, 10000, 1),
        'x_lat': getRandomArbitrary(-69, -66, 0),
        'y_long': getRandomArbitrary(8, 10, 0),
        'azimuth': getRandomArbitrary(0, 359, 1),
        'event_time': getRandomDate()
    });
};

如您所见,数据已创建并在页面上正确显示

enter image description here

然后使用Save Avl函数发送数据

$scope.saveAvl = function () {
    var data = $.param({
        avl_list: $scope.avl
    });

    var config = {
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;'
        }
    };        

    $http.post('/Avl_Api/traffic_tracker_avl/putTrafficAvl', data, config)
    .success(function (data, status, headers, config) {            
        console.log('Sucess.....');           
    })
    .error(function (data, status, header, config) {
        $scope.ResponseDetails = "Data: " + data +
            "<hr />status: " + status +
            "<hr />headers: " + header +
            "<hr />config: " + config;
    });
};

问题出在我的控制器上我为avl_list所有元素的坐标x,y得到0所有其他字段都可以。

public partial class traffic_tracker_avl
{
    public int avl_id { get; set; }
    public long tracker_avl_id { get; set; }
    public long car_id { get; set; }
    public decimal x_lat { get; set; }
    public decimal y_long { get; set; }
    public int azimuth { get; set; }
    public System.DateTime event_time { get; set; }
    public Nullable<System.DateTime> created_at { get; set; }
}

[HttpPost]
public JsonResult putTrafficAvl(List<traffic_tracker_avl> avl_list)
{
    avl_list.ForEach(n => db.traffic_tracker_avl.Add(n));
    db.SaveChanges();
}

我猜是否与十进制字段有关?但奇怪的是得到0而不是截断为整数。我仔细检查,数据和模型字段名称是相同的。

1 个答案:

答案 0 :(得分:0)

如果您所使用的计算机文化不是英语,而是西班牙语,那么-68.504806的值不是有效数字。

有几种解决方案:一种更简单的解决方案是首先将其绑定到模型中的string属性,然后使用代码将其映射到正确的数字:

string x_lat_input = String.Empty; // use this in your model property

var x_lat = Convert.ToDecimal(x_lat_input, CultureInfo.CurrentCulture);