十进制值对价格无效。 MVC3

时间:2014-03-02 09:56:29

标签: 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'对于Price'无效。 我认为这是因为我的PC的默认语言。这不是英语。这是俄罗斯人。 enter image description here

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

  1. 我创建了Model类DecimalModelBinder,并将haacked.com中的代码复制到了类
  2. 使用

    更新了Global.asax
    ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
    

    没效果。然后我尝试通过client-side validation修复它 1.使用代码

  3. 添加名为“jQueryFixes.js”的JavaScript文件
    $.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);
    }
    

    此代码未解决此问题。 你能在这里建议我做错了吗?

5 个答案:

答案 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; }