如何绑定可空的十进制值

问题描述 投票:1回答:1

我遇到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)]属性,但我似乎无法使绑定工作。其他属性按预期绑定。

有没有人知道我是如何做到这一点的?

asp.net-core asp.net-core-mvc asp.net-core-1.0
1个回答
1
投票

如果本地Windows设置未设置为美国本地化,并且您使用默认的asp.net模板jquery验证来验证十进制值,则会出现错误。无论您的小数是否为nullable,都应该发生错误

ASP.NET Core我不认为你可以强制在web.config中定位到美国,因为你以与this及更早版本相同的方式进入ASP.NET MVC5回答,所以你将不得不添加javascript来覆盖jquery.validate.js作为答案提到对同一个问题。

创建一个名为jsvalidationlocalization文件并将其放入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这个解决方法

© www.soinside.com 2019 - 2024. All rights reserved.