【发布时间】:2019-11-07 10:47:48
【问题描述】:
我认为这会很简单......
我有这个小数属性:
[Column(TypeName = "decimal(18,2)")]
public decimal ProjectBudget { get; set; }
我想验证输入是否为正数。这是我尝试过的两条规则:
RuleFor(x => x.ProjectBudget.ToString())
.Matches("^[0-9]*$").WithMessage("Only positive numbers, please.");
RuleFor(x => x.ProjectBudget)
.GreaterThanOrEqualTo(0).WithMessage("Only positive numbers, please.");
在这两种情况下,如果我输入“sdfhj”,这是我得到的错误消息:
值“sdfhj”对 ProjectBudget 无效。
这是来自 Asp.Net Core 内置验证的错误消息。
为什么我的错误消息“请仅使用正数。”出现了吗?
(我知道我可以使用 [Range(0, (double)decimal.MaxValue, ErrorMessage = "Only positive numbers, please.")] 之类的东西在属性上指定错误消息,但这不是我要问的。)
【问题讨论】:
-
发布完整的异常文本和执行验证的代码。 FluentValidation 不使用不同的 验证框架。您发布的属性没有验证属性。
TypeName指定数据库类型名称,而不是某种限制。在任何情况下,decimal都允许负数。验证错误来自其他地方 -
你从哪里得到这条消息?服务器端异常还是客户端消息?您使用的是 ASP.NET Core MVC 还是 Razor Pages? ASP.NET Integration 页面中的 Specifying a RuleSet for client-side messages 和 Use with Page Models 部分解释了一些怪癖
-
@PanagiotisKanavos 也不例外。我的其他属性都没有验证属性,并且按预期进行验证。
-
@PanagiotisKanavos 我正在使用 MVC。验证是服务器端的。
-
还有
RuleSetForClientSideMessages属性?你检查过 ASP.NET 集成页面吗?验证器是如何使用的?
标签: c# asp.net-core fluentvalidation