如何绑定可为空的十进制值
Posted
技术标签:
【中文标题】如何绑定可为空的十进制值【英文标题】:How to bind nullable decimal values 【发布时间】:2016-09-04 17:52:25 【问题描述】:我在使用 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”并从输入元素中跳出,我收到以下错误:
值“68.5”对于 DecimalValue 无效。
我已尝试使用属性上方的[DataType(DataType.Currency)]
属性,但我似乎无法让绑定工作。其他属性按预期绑定。
有没有人知道我是如何做到这一点的?
【问题讨论】:
我无法在基本的 .Net Core (RTM) 项目中重现这一点。 有一个由 ASP.NET Core 提供的全球化解决方案。需要在 Startup.cs 中的 ConfigureServices 和 Configure 方法中添加一些设置查看此文档:docs.microsoft.com/en-us/aspnet/core/fundamentals/… 【参考方案1】:如果您的本地 Windows 设置未设置为美国本地化,并且您使用默认的 asp.net
模板 jquery
验证来验证十进制值,则会出现错误。无论您的小数是否为nullable
,都应该发生错误
在ASP.NET Core
中,我认为您不能在web.config
中强制本地化到美国,就像您在this 答案中一样,您可以在ASP.NET MVC5
和更早版本中使用相同的方式,所以您必须添加 javascript 以覆盖 jquery.validate.js
作为同一问题的答案。
创建一个名为validationlocalization
的js
文件并将其放入您的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+|\d1,3(?:[\s\.,]\d3)+)(?:[\.,]\d+)?$/.test(value);
在需要十进制验证的cshtml
页面中,将javascript
文件的引用添加到您的脚本部分。确保在引用现有 _ValidationScriptsPartial.
之后添加它
@section Scripts
...
<script src="~/js/validationlocalization.js"></script>
More detail 关于此解决方法
【讨论】:
谢谢一百万。这正是我们所需要的:-)以上是关于如何绑定可为空的十进制值的主要内容,如果未能解决你的问题,请参考以下文章
C# winforms:将可空类型绑定到其他属性(不是文本)时出错
如何将 CheckBox 绑定到可为空的布尔类型 DbColumn?
为啥 TargetNullValue 更新可为空的 Source