1

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 を使用するにはどうすればよいですか?

4

1 に答える 1

1

パラメータタイプをに変更してから、またはstringを使用して自分で解析を行うことをお勧めします。DateTime.ParseTryParse

于 2010-11-18T20:12:20.250 に答える