jQuery から AJAX 呼び出しを行うために「WebMethod」属性を使用する ASP .NET Web フォーム アプリケーションがあります。私はアプリケーションをローカライズしようとしているので、最近、テスト目的で次のような Web メソッドを作成しました。
[WebMethod]
public static string HandleDate(DateTime dateValue)
{
return dateValue.ToString("f");
}
このメソッドのポイントは、CultureInfo を適切に設定すると、Web メソッドがそのカルチャの日付形式規則を使用して、提供された日付を正しく解析することを確認することです。残念ながら、このコードに到達することはありません。代わりに、これらの WebMethods の呼び出しを許可するヘルパー クラスによって発生するエラーが表示されます。
「BeginRequest」イベントで、現在のスレッドの「CurrentCulture」および「CurrentUICulture」プロパティを「pt-BR」(ブラジル ポルトガル語) に設定する HttpModule があります。
クライアント側では、dateValue パラメーターを「18/10/2010」として提供するこの「HandleDate」Web メソッドへの jQuery AJAX 呼び出しがあります。'pt-BR' カルチャでは、これは 2010 年 10 月 18 日 (日/月/年の日付形式) に評価される必要があります。
これを実行すると、「System.Web.Script.Serialization.ObjectConverter」が「18/11/2010」は DateTime の有効な値ではないことを示すエラーが表示されます。エラーに含まれるスタック トレースは、これが「System.ComponentModel.DateTimeCoverter.ConvertFrom」メソッドによってスローされたことを示しています。このメソッドは、変換中に適用する必要があるカルチャを表す CultureInfo オブジェクトに加えて、変換するオブジェクトを受け入れます。
Reflector を起動すると、'ObjectConverter' が CultureInfo.InvariantCulture インスタンスを使用して 'DateTimeConverter' を呼び出しているように見えますが、これが問題だと思います。
このロジックで、InvariantCulture の代わりに現在のスレッドに関連付けられている CultureInfo を使用するにはどうすればよいですか?