エンティティを保存するときに月&日がビューモデルプロパティにスワップされているクライアントプロダクションサーバーで問題が発生しています。たとえば、日付ピッカー内で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
Chrisさんのお返事ありがとうございますが、データは実際には2012-09-04として保持されています(sql server 2008)2012-04-09です。私はそのモデルバインディングの問題を信じるようになっていますが、なぜ、または何が問題を引き起こしているのか分かりません。また、メモとして、地域の設定はus englishに設定されています。 – Jesse
クライアント(ブラウザ)がMM/DD/YYYY形式の日付を指定していて、サーバーが英国英語を使用するように設定されている場合、受信した文字列をdd/MM/yyyyとして解析して、 DateTimeオブジェクト用のカスタムモデルバインダーを実装する必要があるようです。これは、現在のカルチャを無視して、期待しているものを使用します。 – Chris
また、各要求時にUIカルチャをオーバーライドして、期待する文化を使用するようにすることもできます。 http://blog.dezfowler.com/2010/08/model-binding-and-localization-in.htmlを参照してください(それはMVC2であるという事実は無視してください)。 – Chris