2015-05-26 96 views
6

我有这样的领域:字段必须是数字

public decimal Price { get; set; }在数据库是十进制(7,2)。

查看:

@Html.EditorFor(model => model.Price, 
       new { htmlAttributes = new { @class = "form-control" } }) 

如果我把一个值与逗号,MVC默认的验证不接受,说:"The field must be a number"。 (我尝试使用正则表达式,但没办法)

例如:5,00, 55,00 or 555,00

而且这样的:

public DateTime date { get;set; } 

查看:

@Html.EditorFor(model => model.Date, 
       new { htmlAttributes = new { @class = "form-control" } }) 

MVC默认的验证不接受日期格式为dd/mm/yyyy,仅限于mm/dd/yyyy

例如:13/02/2015, 15/06/2013, 25/08/2012

是一些与全球化还是什么?我该如何解决这个问题?

+0

有两个不同的问题,最好是创建单独的问题。对于日期时间格式,您可以使用全球化设置并将线索更新为您需要的任何文化。对于第一个问题,您可以使用Money数据类型而不是int – Peyman

+0

您是从字符串中分配的吗?我们可以看到您分配值的代码吗? –

+0

这确实是一个全球化问题。您是否遇到客户端验证,服务器端或两者的问题? –

回答

0

您可能希望与[DisplayFormat]属性为波纹管来装饰你的领域:

[DisplayFormat(DataFormatString = "{0:N}", ApplyFormatInEditMode = true)] 
public decimal Price { get; set; } 
+3

不,同样的错误。 – developer033

0

我有同样的问题,我用全球化库(globalize.js)来解决这个问题,但他们改变了它如此它不包含本地化文件。它应该从cldr库中获取它们,但我还没有弄清楚它是如何实现的。

1

你必须用[DataType(DataType.Currency)]来标记你的财产。

[DataType(DataType.Currency)] 
public decimal Price { get;set;} 
0

你可以在这里找到答案error with decimal in mvc3 - the value is not valid for field,它并没有为我工作,所以我用这个临时

<div class="col-md-10"> 
      @{ Html.EnableClientValidation(false); } 
      @Html.EditorFor(model => model.DecimalValue, new { htmlAttributes = new { @class = "form-control" } }) 
      @{ Html.EnableClientValidation(true); } 
      @Html.ValidationMessageFor(model => model.DecimalValue, "", new { @class = "text-danger" }) 
     </div> 

和我这个在这里找到ASP .NET MVC Disable Client Side Validation at Per-Field Level

8

一个解决方案,我发现是覆盖验证功能jquery.validate.js


<script> 

    $.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); 
    } 
    //Date dd/MM/yyyy 
    $.validator.methods.date = function (value, element) { 
     var date = value.split("/"); 
     return this.optional(element) || !/Invalid|NaN/.test(new Date(date[2], date[1], date[0]).toString()); 
    } 
</script> 
+1

工程就像一个魅力。 – Yoshi

相关问题