我有这个字段:
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
是全球化还是什么?我怎么解决这个问题?
我发现的一个解决方案是重写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>
您可能想要用[DisplayFormat]
属性装饰您的字段,如下所示:
[DisplayFormat(DataFormatString = "{0:N}", ApplyFormatInEditMode = true)]
public decimal Price { get; set; }
您可能会在mvc3中找到您的答案-该值对字段无效,它不适合我,所以我使用了这个临时
<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禁用客户端验证在每个字段级别
我有同样的问题,我曾经用全球化库(全球化.js)来解决它,但他们改变了它,所以它不包括本地化文件。它应该从cldr库中获得它们,但我还没有弄清楚如何。