2

InvariantCulture (16.4) に 10 進形式の値を投稿しましたが、ドイツのシステムでモデルに到達しなかったことに驚きました。

ドイツ語の形式 (16,4) を使用する必要がありました。パラメーターの解析に使用される言語を構成する方法はありますか?

編集:ソースコードにデバッグした後、ValueProviderDictionary に言語固有の部分が見つかりました

PopulateDictionary。そこにあるドキュメントには次のように書かれています。

  1. リクエスト フォームの送信 (文化を意識する必要があります)
  2. RouteData からの値 (入力された URL またはルートのデフォルト値からの値である可能性があります)
  3. URI クエリ文字列

1.CurrentCulture を取得 2./3. InvariantCultureを取る

これは私にはうまくいきません。値を投稿したり、クエリ文字列に入れたりすると、Culture の使用に関して別の動作は期待できません。ユーザーが解析可能な値を手で入力する場合は必要になるかもしれませんが、リストボックスの値を入力する場合は奇妙です。両方のバージョンを切り替えることができれば、理想的な解決策になると思います。

とにかく、PopulateDictionary が呼び出される前に CultureInfo.CurrentCulture を設定する方法を見つける必要がありました。それが私がやった方法です:

        void Application_BeginRequest(object sender, EventArgs e)
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

    }
4

2 に答える 2

3

デフォルトの解析では、CurrentCultureが使用されます。ただし、すべての解析メソッドはIFormatProvider(CultureInfoの場合もあれば、解析するものに応じてNumberFormatInfoまたはDateTimeFormatInfoの場合もあります)を取ります。このシナリオでは、InvariantCultureを使用する必要があります(ユーザーに表示されないバックエンド内のすべてのものは、InvariantCultureを使用する必要があります)。

于 2009-06-11T16:16:42.360 に答える
0

これで問題は解決しました。ただし、注意してください: ユーザーがローカル形式で値を入力すると、解析されません。これは私のアプリケーションではほとんど起こりません。うまくいけば、私が使用する UI コンポーネントが、値の表示と投稿に異なる文化を許可することを願っています。

    void Application_BeginRequest(object sender, EventArgs e)
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

    }
于 2009-06-11T19:10:20.447 に答える