0

これはちょっと奇妙です...

私のフォームには 2 つのボタンがあります (どちらも<input type="button" />)。ボタン 1 (B1) にはonclick="update()"、Data パラメーターが入力された Ajax を呼び出す場所があります。2 番目のボタン (B2) は、昔ながらの送信を使用します。ちなみに、どちらのボタンも同じコントローラー/アクションを呼び出します。フィールドから日付を送り返すためのボタンがあり@Html.EditorFor(x => x.StartDate)ます(つまり、jquery datepickerです)。

たとえば、StartDate = "30/09/2012" (dd/mm/yy) とします。

B1 をクリックすると、Ajax が呼び出され、すべてのデータが data パラメーターを介して正しく渡されます。このパラメーターは、$("#form").serializeArray() からの json です。この呼び出しはバインダーをスキップし、指定されたコントローラー/アクションを直接呼び出します。私の StartDate プロパティには正しい日付が付いています。

しかし、B2 をクリックすると、既定の動作でクエリ文字列が作成され、アプリケーションがクラッシュします。何が起こっているのかをインターセプトして検査するためにカスタムの日付バインダーを作成しましたが、日付文字列が「2012 年 9 月 30 日」であり、dd/mm を使用するカルチャ (pt-BR) に変換しようとしていることに気付きました。

もう少し先に進むと、奇妙なクエリ文字列を作成していたため、送信イベントに問題があることがわかりました。

//../Action?StartDate=09%2F30%2F2011%2000%3A00%3A00

もう 1 つ: Datepicker、webconfig、およびクライアント ブラウザーはすべて同じカルチャに構成されています。

さて、これをどのように進めればよいでしょうか?送信されたすべての日付が mm/dd/yy としてバインダーに到着し、カスタムの日付バインダーがこれを管理するように強制することを一般化できますか?

ありがとう!

4

1 に答える 1

0

グーグルで調べたところ、Default Binder の仕組みと、ブラウザーがクエリ文字列を dd/mm/yy として作成する理由を説明しているこの素晴らしい記事を見つけました。基本的に、.NET フレームワークはクエリ文字列に対して InvariantCulture を使用します。

http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx

文化の問題で立ち往生している場合は、この投稿を読む価値があります。

于 2012-09-25T19:24:25.650 に答える