我有一个网格视图,其数据基于long
值作为键,需要该键进行其他操作(查找记录)。传递给操作时,该值将在视图中向上舍入:
ActionLink("some action", "some action", new{ key = "#=key#"}); // #= # is Kendo syntax
例如:
636280844960803997 is rounded to
636280844960804000
那么考虑到我不能在我的模型中添加该属性的任何属性,这是什么修复。
答案 0 :(得分:1)
问题是JavaScript只支持53位整数,这将使得支持的最大整数为9007199254740991.您的密钥大于此值。您可以查看Number.MAX_SAFE_INTEGER
(https://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,因此无法对值进行舍入