长值在视图中四舍五入

时间:2017-04-18 23:01:00

标签: asp.net-mvc kendo-ui asp.net-core-mvc

我有一个网格视图,其数据基于long值作为键,需要该键进行其他操作(查找记录)。传递给操作时,该值将在视图中向上舍入:

ActionLink("some action", "some action", new{ key = "#=key#"}); // #= # is Kendo syntax

例如:

636280844960803997 is rounded to
636280844960804000

那么考虑到我不能在我的模型中添加该属性的任何属性,这是什么修复。

2 个答案:

答案 0 :(得分:1)

问题是JavaScript只支持53位整数,这将使得支持的最大整数为9007199254740991.您的密钥大于此值。您可以查看Number.MAX_SAFE_INTEGERhttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER

此问题的解决方案是在客户端使用密钥的字符串表示形式。一个很好的例子是Twitter API,它们返回一个整数和一个字符串:{"id": 10765432100123456789, "id_str": "10765432100123456789", ...}。这里有一篇很好的文章:http://2ality.com/2012/07/large-integers.html

如果您使用的是ASP.NET MVC,我建议您在模型类中添加另一个属性,该属性将返回密钥的ToString()版本。这样,您可以在JavaScript中使用字符串版本,同时利用数据库或服务器端代码中的数值。这是一个例子

public class Item
    {
        public Item()
        {
            // ... your constructor code here ...
        }

        // Your long integer key
        public Int64 ItemId { get; set; }

        // The string version of your key
        public string ItemIdString
        {
            get
            {
                return this.ItemId.ToString();
            }
        }

        // The rest of your fields
        // ...
}

然后,当您绑定Kendo网格或客户端上的任何其他内容时,您可以使用ItemIdString

如果您无法修改原始类,那么我建议您创建一个继承原始类的子类,并将ItemIdString属性添加到该类中。然后只需使用子类来绑定网格。

答案 1 :(得分:0)

如果可能,您可以在关键字段中使用字符串而不是int,因此无法对值进行舍入