为啥数据在我的控制器中被截断为 0? [复制]
Posted
技术标签:
【中文标题】为啥数据在我的控制器中被截断为 0? [复制]【英文标题】:Why the data get truncate to 0 in my controller? [duplicate]为什么数据在我的控制器中被截断为 0? [复制] 【发布时间】:2018-10-01 10:16:48 【问题描述】:我正在迁移一个应用程序,所以这段代码已经可以工作了。
我有一个角度函数来创建随机 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()
);
;
如您所见,数据已创建并正确显示在页面上
然后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 而不是截断为整数。我仔细检查了一下,数据和模型字段名称是一样的。
【问题讨论】:
使用$.param()
加载后data
的外观如何?
@lex 不知道你能不能在这里理解。但看起来还可以avl_list%5B0%5D%5Btracker_avl_id%5D=2126&avl_list%5B0%5D%5Bcar_id%5D=712&avl_list%5B0%5D%5Bx_lat%5D=-66.616149&avl_list%5B0%5D%5By_long%5D=9.25226&avl_list%5B0%5D%5Bazimuth%5D=173&avl_list%5B0%5D%5Bevent_time%5D=2016-09-28+06%3A02&avl_list%5B1%5D%5Btracker_avl_id%5D=739125&avl_list%5B1%5D%5Bcar_id%5D=7203&avl_list%5B1%5D%5Bx_lat%5D=-68.003599&avl_list%5B1%5D%5By_long%5D=9.043924&avl_list%5B1%5D%5Bazimuth%5D=1&avl_list%5B1%5D%5Bevent_time%5D=2016-09-28+05%3A03
是的,很糟糕。我想我希望它已经调整了纬度/经度参数。我难住了。这是 Web API 2 后端吗?只是把它扔在那里,但我们从来不需要序列化或添加任何配置内容(并且我们返回一个 IHttpActionResult)。
@lex as OJ 建议我尝试从十进制更改为字符串并获取数据。但这感觉不对。它是一个带有附加操作的 MVC 5 控制器
【参考方案1】:
如果您使用的计算机的文化不是英语,而是类似于西班牙语,那么 -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);
【讨论】:
但在我的区域设置中,.
是小数点分隔符。这不应该工作吗?
将参数设置为字符串似乎可行,但不是我正在寻找的解决方案。以上是关于为啥数据在我的控制器中被截断为 0? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 IF 在我的 PL?SQL 脚本中被忽略? [复制]
为啥控制器发送的 html 代码显示在我的页面中? [复制]
Request.Result 中的字符串在 MVC 5 中被截断
为啥我的 UICollectionView 支持方法仅在我的 ViewController 设置为初始视图控制器时调用?