如何绑定可为空的十进制值

How to bind nullable decimal values

我在使用 ASP.NET 核心 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”并跳出输入元素,出现以下错误:

The value '68.5' is not valid for DecimalValue.

我已经尝试使用 属性 上方的 [DataType(DataType.Currency)] 属性,但我似乎无法使绑定生效。其他属性按预期绑定。

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

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

,都应该会出现错误

ASP.NET Core 我不认为你可以在 web.config 中强制本地化到美国,因为你在 this 中的回答与你在 [=17] 中的方式相同=] 和更早的版本,因此您必须添加 javascript 来覆盖 jquery.validate.js 作为同一问题的答案。

创建一个名为 validationlocalizationjs 文件并将其放入您的 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 关于此解决方法