私はあなたのような問題を抱えていましたが、まったく同じではありませんでした。私は次のような問題を抱えていました。
<asp:RangeValidator ID="rw" ErrorMessage="error"
Text="!" ControlToValidate="r" MinimumValue="1 000,00" MaximumValue="1 000 000,00" Type="Currency" CultureInvariantValues="false" runat="server" EnableClientScript="true" />;
コントロールをたとえば2000,00のデータでデータバインドしましたが、検証エラーが発生しました
しかし、私がod 2 000,00の値を入力したとき、すべてがOKでした。
答えはCurrencyGroupSeparatorのスペースでした。私のカルチャpl-plにはスペースがありますが、スペース「\ x0020」ではありませんが、ノーブレークスペース「\00A0」です。
私はリフレクターを使って掘りましたが、私が見つけたのは不可解です
通貨フォーマットチェックは、メソッドprivate static string ConvertCurrency(string text、NumberFormatInfo info)のBaseCompareValidatorクラスにあります。
コードには次のような行があります。
if (currencyGroupSeparator[0] == '\x00a0')
{
currencyGroupSeparator = " ";
}
逆コンパイルされたコードをテストプロジェクトに入れて実行しようとしましたが、実際にコードが正しく機能していませんでした。
ConvertCurrency(10000000.00m.ToString( "n")、NumberFormatInfo.CurrentInfo)はnullを返しました。
なぜ誰かがそこに置いたのかはわかりませんが、コメントしたところ、メソッドは正常に動作し始めました。
まだソースから.netFrameworkをコンパイルできないので、区切り文字をノーブレークスペースからスペースに変更することができます。
したがって、私たちの問題の解決策は次のとおりです。
Thread.CurrentThread.CurrentCulture = new CultureInfo( "いくつかのカルチャ名");
Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyGroupSeparator = "\ x0020"; Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator = "\ x0020";