2012-04-10 5 views
4

エンティティを保存するときに月&日がビューモデルプロパティにスワップされているクライアントプロダクションサーバーで問題が発生しています。たとえば、日付ピッカー内でApril 9th 2012 (04/09/2012)を選択すると、日付はSeptember 4th 2012 (09/04/2012)として保存されます。エンティティを実稼働サーバーに保存するときに日と月がスワップされる

ローカルの開発/テストサーバーでは、同じコントローラアクションが正しく動作していますが、次に何を確認するのか分かりません。

のviewmodelでプロパティ:

[DisplayName("Date")] 
[Required] 
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yy}")] 
[DataType(DataType.Date)] 
public DateTime StartDate { get; set; } 

関連ビュー内のヘルパー:

@Html.EditorFor(model => model.StartDate) 

jqueryのUIの日付ピッカー

$('#StartDate').datepicker({ dateFormat: 'mm/dd/yy' }); 
コントローラの

ストリップダウンバージョン:関連記事

public ActionResult Create(BulletinBoardViewModel bulletin) 
{ 
    var model = AutoMapper.Mapper.Map<BulletinBoardViewModel, BulletinBoard>(bulletin); 
    _repository.Save(model); 

    return RedirectToAction("Index"); 
} 

ヘッダー:クライアントのサーバーは米国ではなくイギリス英語に設定されているよう

StartDate:04/09/2012 

Cache-Control:private, s-maxage=0 
Content-Length:131 
Content-Type:text/html; charset=utf-8 
Date:Tue, 10 Apr 2012 02:43:16 GMT 
Location:/BulletinBoard 
Server:Microsoft-IIS/7.5 
X-AspNet-Version:4.0.30319 
X-AspNetMvc-Version:3.0 
X-Powered-By:ASP.NET 

答えて

2

が鳴ります。これは一般的なCultureInfoの問題です。どちらの方法でも、オブジェクトが永続化されているときは、日付の値は正しいはずです。これは、UI文化の選択のために異なって表示されているだけです。

明らかな問題ではなく、実際の問題である特定のコードを特定できますか?

また、実際には9月4日に保存されていません。あなたはちょうどそのようにそれを読んでいます。たとえば、12月31日を選択してみてください。エンティティが保存されると、おそらく31/12/2012が表示されます。サーバーは日付をdd/MM/yyyy形式で表示しています。

+0

Chrisさんのお返事ありがとうございますが、データは実際には2012-09-04として保持されています(sql server 2008)2012-04-09です。私はそのモデルバインディングの問題を信じるようになっていますが、なぜ、または何が問題を引き起こしているのか分かりません。また、メモとして、地域の設定はus englishに設定されています。 – Jesse

+0

クライアント(ブラウザ)がMM/DD/YYYY形式の日付を指定していて、サーバーが英国英語を使用するように設定されている場合、受信した文字列をdd/MM/yyyyとして解析して、 DateTimeオブジェクト用のカスタムモデルバインダーを実装する必要があるようです。これは、現在のカルチャを無視して、期待しているものを使用します。 – Chris

+0

また、各要求時にUIカルチャをオーバーライドして、期待する文化を使用するようにすることもできます。 http://blog.dezfowler.com/2010/08/model-binding-and-localization-in.htmlを参照してください(それはMVC2であるという事実は無視してください)。 – Chris

関連する問題