十进制值对于价格无效。MVC3

Joe*_*mov 5 javascript c# validation asp.net-mvc asp.net-mvc-3

产品.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; }
...
Run Code Online (Sandbox Code Playgroud)

当我输入“89.48”时,表单给出“值“89.48”对价格无效”。我认为这是因为我电脑的默认语言。它不是英语。它是俄语。 在此处输入图片说明

我试图通过haacked.com说明解决这个问题:

  1. 我创建了模型类 DecimalModelBinder 并将代码从 haacked.com 复制到类中
  2. 更新了 Global.asax

    ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
    
    Run Code Online (Sandbox Code Playgroud)

    没有效果。然后我尝试通过客户端验证修复它 1.Added JavaScript file called "jQueryFixes.js" with code

$.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);
}
Run Code Online (Sandbox Code Playgroud)

这段代码没有解决这个问题。你能建议我在这里做错什么吗?

小智 6

我在 web.config 中设置

<system.web>
    <globalization uiCulture="en-US" culture="en-US"/>
<system.web>
Run Code Online (Sandbox Code Playgroud)

这个解决方案对我有用,我遇到了同样的错误

  • 我们需要另一个全球化什么身份??!! (2认同)

Zia*_*han 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; }
Run Code Online (Sandbox Code Playgroud)

应该有帮助。