2012-03-26 51 views
2

upshot.js如何处理DateTime对象?Upshot MVC 4处理Date,knockout绑定

因为它似乎只是创建“正常”的字符串,并没有创建一个真正的JS日期对象。

所有有关JSON的日期格式和MVC的问题在这里已经讨论: Handling dates with Asp.Net MVC and KnockoutJS

因此,即使改变了MVC默认JSON格式来JSON.Net后其仍然没有做自动转换日期。 不幸的是,所有绑定必须“每手”完成,以在内部创建Date对象。随着JSON.Net格式的日期到新的日期(字符串)方法似乎工作正常,因为构造函数是处理日期格式字符串完美。

是否有一个“通用”库可用于处理绑定中的所有不同的值类型?

+0

我在这里发现了JSON.net格式化日期的另一个问题。 如果我使用替换的JSON.Net格式化程序,那么日期会很好,并且可以很容易地转换为JS日期对象。 但如果你想发送实体回服务器 - 它失败。不知何故,如果格式化程序取代了defaultjson格式化程序,desrialisation似乎不起作用... – Obiwan007 2012-03-27 11:42:28

回答

3

这是一个古老的故事,由于json没有日期的默认格式。此外,格式/Date(.....)/假装用的.Net(.NET不仅仅是asp.net)不容易与所有现代浏览器允许的JSON定制也处理:

  1. 的第一个问题是浏览器json解析函数无法理解/Date(.....)/格式。这很容易通过定制Json解析来解决。网上有很多补丁。
  2. 将日期发送回服务器时出现同样的问题。但是在这种情况下,修补是非常困难的,因为当JSON.stringify方法接受一个函数来定制json序列化时,如果你传递一个将每个日期转换为字符串“/Date(.....)/”的函数。 ..然后stringify函数ADD furteh \并将其转换为:“\/Date(.....)\ /”,即它转义\ char ....但以这种方式转换的字符串不能理解DOTNET。另一方面,如果您将日期转换为/Date(.....)/...不添加转义字符,那么...在这种情况下,您将得到错误的编码。
  3. 此外,如果你解决了上述问题......往返服务器/客户端/服务器后日期返回更改。具体来说,时间轴偏移量是从原始日期中减去的......这是由于.NET和浏览器处理时间轴的方式不同。
  4. upshot只是调用浏览器JSON.stringify函数...所以它没有空间来定制日期。

,如果你使用MVC控件工具包项目的client blocks功能(我的协调人),你可以使用“增强型”基因敲除自动处理问题1和2在下一版本进来几个天我也将添加自动处理问题3. 但是...这不会解决结果的问题...因为我钩了knokout映射插件的映射功能,没有被upshot用来发回数据服务器......因为upshot直接调用JSON.stringify ...似乎没有办法解决这个问题......除了修改upshot以在发布数据时处理json自定义格式。

在客户端块的upcomig版本中,我将提供一个UpdateManager类,它可以完成与结果处理“相似”的工作,以便正确处理日期......但是,由于它使用了完全不同的更新策略,因此它永远不会取代结果...而且只是一个选项而已,不是替代品。 所以我希望在最终发布的结果中可以定制json格式的数据。

+0

Thx for your reply。 1.问题很容易解决 - 我只是使用JSON.Net lib以ISO格式(不是/ Date *)创建日期。所以新的日期(字符串)工作完美。 2.正如您所指出的那样,发回是一个问题。我目前没有想法客户端发回服务器的内容。我有时检查与提琴手:) 林希望你的lib。目前结果/ SPA并不是一个真正的选择,因为迄今为止问题太多。也许我会尝试通过knockout模型构建器创建模型的直接方法。 – Obiwan007 2012-03-27 18:03:04

+0

看到这个职位斯科特Hanselman; http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx。在这篇文章的最后,他承诺在最终版本中......他们将使用WebApi发布JSON.net ......所以,所有js和dll都会有一个“规范化”......这将一起工作 – 2012-03-27 23:04:26

+0

my lib已经发布在cedeplex上,请看这里:http://mvccontrolstoolkit.codeplex.com/在那个链接你会发现代码示例和教程的指针。官方文档将在接下来的几天更新 – 2012-04-04 14:50:15