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'对于Price'无效。 我认为这是因为我的PC的默认语言。这不是英语。这是俄罗斯人。
我试图通过haacked.com说明解决此问题:
使用
更新了Global.asaxModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
没效果。然后我尝试通过client-side validation修复它 1.使用代码
$.validator.methods.range = function (value, element, param) { var globalizedValue = value.replace(",", "."); return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]); } $.validator.methods.number = function (value, element) { return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value); }
此代码未解决此问题。 你能在这里建议我做错了吗?
答案 0 :(得分:4)
我在web.config中设置
<system.web>
<globalization uiCulture="en-US" culture="en-US"/>
<system.web>
这个解决方案对我有用,我得到了同样的错误
答案 1 :(得分:0)
试试这个
[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; }
应该有所帮助。
答案 2 :(得分:0)
在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);
}
解决方案来自此link。
答案 3 :(得分:0)
在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;
}
答案 4 :(得分:-1)
试试这个:
[Required(ErrorMessage = "Price is required")]
[DataType(DataType.Currency)]
public decimal Price { get; set; }