C# 十进制值对价格无效。MVC3
Product.csC# 十进制值对价格无效。MVC3,c#,javascript,asp.net-mvc,asp.net-mvc-3,validation,C#,Javascript,Asp.net Mvc,Asp.net Mvc 3,Validation,Product.cs ... [Required(ErrorMessage="Price is required")] [Range(0.01, 100000.00, ErrorMessage="Price must be between 0.01 and 100000.00")] public decimal Price { get; set; } ... 当我输入'89.48'时,表格给出的是'89.48'值对价格无效'。 我想这是因为我电脑的默认语
...
[Required(ErrorMessage="Price is required")]
[Range(0.01, 100000.00,
ErrorMessage="Price must be between 0.01 and 100000.00")]
public decimal Price { get; set; }
...
当我输入'89.48'时,表格给出的是'89.48'值对价格无效'。
我想这是因为我电脑的默认语言,不是英语。是俄文的。
我试图通过以下说明来解决此问题:
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
没有效果。然后我试着用英语来解决它
1.添加了名为“jQueryFixes.js”的JavaScript文件,其中包含代码$.validator.methods.range=函数(值、元素、参数){
var globalizedValue=value.replace(“,”,“);
返回此值。可选(元素)| |(globalizedValue>=param[0]&&globalizedValue尝试以下操作
[Required(ErrorMessage = "Price is required")]
[Range(typeof(decimal), "0.01", "100000.00", ErrorMessage = "enter decimal value")]
[RegularExpression(@"^\[0-9]{1,6}\.[0-9]{2}$", ErrorMessage="enter decimal value of format $9.99")]
public decimal Price { get; set; }
应该会有帮助。试试这个:
[Required(ErrorMessage = "Price is required")]
[DataType(DataType.Currency)]
public decimal Price { get; set; }
在DecimalModelBinder
类中替换为此
//if with period use InvariantCulture
if (valueResult.AttemptedValue.Contains("."))
{
actualValue = Convert.ToDecimal(valueResult.AttemptedValue,
CultureInfo.InvariantCulture);
}
else
{
//if with comma use CurrentCulture
actualValue = Convert.ToDecimal(valueResult.AttemptedValue,
CultureInfo.CurrentCulture);
}
解决方案来自于此。我在web.config中设置
<system.web>
<globalization uiCulture="en-US" culture="en-US"/>
<system.web>
这个解决方案对我有效,我在Global.asax文件中遇到了相同的错误,使用下面的代码解决了我的土耳其语问题
protected void Application_BeginRequest()
{
var cultureInfo = new CultureInfo("tr-TR");
cultureInfo.NumberFormat.NumberDecimalSeparator = ".";
System.Threading.Thread.CurrentThread.CurrentUICulture = cultureInfo;
Thread.CurrentThread.CurrentCulture = cultureInfo;
}
虽然此代码片段可能会解决此问题,但它没有解释为什么或如何回答此问题。请注意,这确实有助于提高您文章的质量。请记住,您将在将来为读者回答此问题,而这些人可能不知道您的代码建议的原因。我们需要另一个全球化的id是什么??!!
protected void Application_BeginRequest()
{
var cultureInfo = new CultureInfo("tr-TR");
cultureInfo.NumberFormat.NumberDecimalSeparator = ".";
System.Threading.Thread.CurrentThread.CurrentUICulture = cultureInfo;
Thread.CurrentThread.CurrentCulture = cultureInfo;
}