我遇到ASP.NET Core MVC和decimal?
值的问题。
我有以下视图模型:
public class BlobViewModel
{
public int Id { get; set; }
public int? IntegerValue { get; set; }
public string StringValue { get; set; }
[DataType(DataType.Date)]
public DateTime? DateValue { get; set; }
public decimal? DecimalValue { get; set; }
}
以及我视图中的以下输入元素
<input asp-for="DecimalValue" class="form-control" />
当我输入小数值时,例如“68.5”或“68,5”以及输入元素中的tab,我收到以下错误:
值'68 .5'对DecimalValue无效。
我已尝试使用属性上方的[DataType(DataType.Currency)]
属性,但我似乎无法使绑定工作。其他属性按预期绑定。
有没有人知道我是如何做到这一点的?
如果本地Windows设置未设置为美国本地化,并且您使用默认的asp.net
模板jquery
验证来验证十进制值,则会出现错误。无论您的小数是否为nullable
,都应该发生错误
在ASP.NET Core
我不认为你可以强制在web.config
中定位到美国,因为你以与this及更早版本相同的方式进入ASP.NET MVC5
回答,所以你将不得不添加javascript来覆盖jquery.validate.js
作为答案提到对同一个问题。
创建一个名为js
的validationlocalization
文件并将其放入wwwroot\js
文件夹中,其中包含以下内容
$.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);
}
在需要十进制验证的cshtml
页面中,将javascript
文件的引用添加到脚本部分。确保在引用现有_ValidationScriptsPartial.
后添加它
@section Scripts {
...
<script src="~/js/validationlocalization.js"></script>
More detail on这个解决方法