Upshot MVC 4处理Date,淘汰赛绑定

时间:2012-03-26 19:43:55

标签: knockout.js asp.net-mvc-4 upshot

upshot.js如何处理DateTime对象?

因为它似乎只是创建“普通”字符串而不是创建一个真正的JS日期对象。

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

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

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

1 个答案:

答案 0 :(得分:3)

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

  1. 第一个问题是浏览器json解析函数不理解/Date(.....)/格式。通过自定义Json解析可以轻松解决这个问题。网上有很多补丁。
  2. 将日期发送回服务器时遇到同样的问题。但是在这种情况下,修补非常困难,因为当JSON.stringify方法接受一个函数来自定义json序列化时,如果你传递一个函数将每个日期转换为字符串“/Date(.....)/”。 ..然后stringify函数ADD furteh \并将其转换为:“\ / Date(.....)\ /”,即它转义了\ char ....但是这种方式转换的字符串不被理解DOTNET。另一方面,如果你将日期转换为/Date(.....)/...no,则会添加转义字符...所以在这种情况下你得到的编码错误。
  3. 此外,如果您解决了上述问题...在往返服务器/客户端/服务器之后,日期返回已更改。具体来说,时间线偏移量是从原始日期中减去的......这是由于.Net和浏览器处理时间轴的方式不同。
  4. upshot只是调用浏览器JSON.stringify函数...所以它没有空间来定制日期。
  5. 如果您使用Mvc Controls Toolkit项目的client blocks功能(我是协调员),您可以使用“增强型”淘汰赛来自动处理问题1和2.在下一个版本中进入几天我还会添加问题3的自动处理。 但是......这不会解决结果的问题......因为我挂了knootout映射插件的映射函数,这些函数没有被upshot用来在服务器上发回数据......而且upshot直接调用JSON.stringify ...似乎没有办法解决问题......除了在发布数据时修改upshot以处理json自定义格式。

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