3

フレームワーク 4.0 Asp.net アプリケーション

コードを実行すると、「'RangeValidator' の MaximumValue プロパティの値 '999.9999' をタイプ 'Currency' に変換できません。

以下は私のコードです:

<asp:RangeValidator Runat='server' ControlToValidate='textEdit' 
    MinimumValue='0.0001'
    MaximumValue='999.9999' Type='Currency' 
    ErrorMessage='Should be between 0.0001 and 999.9999' id="idValidtor" 
 display='None' />

通貨の値には小数点以下 2 桁以上を含めることはできないということを教えてください。どうすればこの問題を解決できますか?

4

1 に答える 1

8

はプロパティをRangeValidator使用してNumberFormatInfo.CurrencyDecimalDigits、文字列を通貨に変換できるかどうかを判断します。変換できない場合は、例外がスローされます。MSDNから:

RangeValidatorコントロールのTypeプロパティが"Currency"に設定されている場合、MinimumValueプロパティとMaximumValueプロパティは、NumberFormatInfo.CurrencyDecimalDigitsで説明されているような形式で提供する必要があります。そうしないと、例外がスローされます。

ほとんどの文化(を含む)のデフォルトInvariantCultureは2です(アラブ諸国には3つありますが、4つはありません)。

では、どの文化を使用していますか?通貨で小数点以下2桁を超える桁数を格納することが重要な場合はNumberFormatInfo、このページでカスタムを使用できます。

protected void Page_PreInit(object sender, EventArgs e)
{
    var customCulture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
    var nfi = (NumberFormatInfo)customCulture.NumberFormat.Clone();
    nfi.CurrencyDecimalDigits = 4;
    customCulture.NumberFormat = nfi;
    System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;
}

using System.Globalization;(上部に追加する必要があることに注意してください)

于 2013-02-01T09:52:30.733 に答える