C# 十进制值对价格无效。MVC3

C# 十进制值对价格无效。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'值对价格无效'。 我想这是因为我电脑的默认语

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'值对价格无效'。 我想这是因为我电脑的默认语言,不是英语。是俄文的。

我试图通过以下说明来解决此问题:

  • 我已经创建了模型类DecimalModelBinder,并将代码从haacked.com复制到类中
  • 使用更新的Global.asax

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