RangeValidator货币值小数后不能超过2位数?

use*_*064 3 .net c# vb.net asp.net

Framework 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' />
Run Code Online (Sandbox Code Playgroud)

请解释一下我的货币值是否小数后不能超过2位数?除非我如何解决这个问题?

Tim*_*ter 8

RangeValidator使用NumberFormatInfo.CurrencyDecimalDigits属性来确定该字符串是否可以转换为货币,否则会抛出你的异常.来自MSDN:

当RangeValidator控件的Type属性设置为"Currency"时,必须以NumberFormatInfo.CurrencyDecimalDigits中描述的格式提供MinimumValue和MaximumValue属性,否则抛出异常.

大多数文化(包括InvariantCulture)的默认值为2(阿拉伯国家有3个但没有4个).

那么你使用什么文化?如果在货币中存储多于两个的小数位数很重要,那么您可以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;
}
Run Code Online (Sandbox Code Playgroud)

(请注意,您需要using System.Globalization;在顶部添加)