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)。

那你用的是什么文化?如果在货币中存储多于两位的小数位很重要,那么您可以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 回答