2012-03-26 28 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

相關問題