2

的問題發佈日期(日/月/年)和浮子(逗號)值ASPNET的WebAPI

當我張貼JSON數據到的WebAPI,使用PT-BR格式(日/月/年的日期和浮點型逗號小數點分隔符),這些值被反序列化爲導致錯誤的en-us格式。

»日期:發佈23/01/2013 01/01/0001 becames

»浮動:張貼1,4 becames 0.0

幫助請求

任何人都可以幫助我定義「最終」解決方案,使用除en-US之外的其他文化將數據發佈到web api。 我已經閱讀了幾個討論,但沒有一個提出完整的解決方案,甚至是一個工作解決方案。

考慮以下

型號:

public class Person 
{ 
    public Datetime BirthDate { get; set; } 
    public double Weight { get; set; } 
} 

ApiController方法

public HttpResponseMessage Create(Person person) 
{ 
    // ... 
} 

AjaxCall的

$.ajax({ 
    type: 'POST', 
    url: sl.baseUri + "/create", 
    data: "Weight=87%2C7&BirthDate=17%2F07%2F1981", 
    success: null, 
    dataType: "json", 
}) 

**我已經添加了以下全球化集吊環到web.config

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="pt-BR" uiCulture="pt-BR"/> 
+0

我有類似的問題。當它不符合格式時,我會將日期視爲空。你是如何解決它的? – Oktay

+0

@Oktay我回答了這個問題。 – TPaim

回答

0

要解決此問題,我創建了日期的自定義綁定。

ko.bindingHandlers.date = { 
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) { 
     ko.utils.registerEventHandler(element, 'change', function() { 
      var value = valueAccessor(); 

      if (element.value !== null && element.value !== undefined && element.value.length > 0) { 
       value(element.value); 
      } 
      else { 
       value(''); 
      } 
     }); 
    }, 
    update: function (element, valueAccessor, allBindingsAccessor, viewModel) { 
     var value = valueAccessor(); 
     var valueUnwrapped = ko.utils.unwrapObservable(value); 

     var output = ''; 
     if (valueUnwrapped !== null && valueUnwrapped !== undefined && valueUnwrapped.length > 0) { 
      output = moment(valueUnwrapped).format('YYYY-MM-DD'); 
     } 

     if ($(element).is('input') === true) { 
      $(element).val(output); 
     } else { 
      $(element).text(output); 
     } 
    } 
}; 

這種結合保持日期的格式如下:2014-11-05T00:00:00-02:00 建議您使用您的HTML中的輸入類型=日期。

另外,您需要將moment.js庫包含到您的項目中。