【问题标题】:Why is Asp.Net Core's built in validation error message showing instead of my Fluent Validation one?为什么显示的是 Asp.Net Core 的内置验证错误消息而不是我的 Fluent Validation?
【发布时间】: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 messagesUse with Page Models 部分解释了一些怪癖
  • @PanagiotisKanavos 也不例外。我的其他属性都没有验证属性,并且按预期进行验证。
  • @PanagiotisKanavos 我正在使用 MVC。验证是服务器端的。
  • 还有RuleSetForClientSideMessages 属性?你检查过 ASP.NET 集成页面吗?验证器是如何使用的?

标签: c# asp.net-core fluentvalidation


【解决方案1】:

试试这个。


            services.AddControllersWithViews()
               .AddFluentValidation(options =>
                {
                   options.RegisterValidatorsFromAssembly(Assembly.GetEntryAssembly());
                   options.ImplicitlyValidateChildProperties = true;
                   options.RunDefaultMvcValidationAfterFluentValidationExecutes = false;
                });

【讨论】:

    猜你喜欢
    • 2012-12-30
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多