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' />
请解释一下,小数点后货币值是否不能超过2位数? 除非我如何解决这个问题?
答案 0 :(得分: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;
)