You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Blazor验证器中int类型的默认错误提示信息

解决Blazor InputNumber默认验证提示替换及双重提示问题

问题原因分析

你遇到的双重提示问题本质在于:

  • 当输入非整数内容时,int类型的模型绑定会触发内置类型转换验证,弹出默认的“Quantity字段必须是数字”提示;
  • 同时int类型默认值为0,添加[Range(1, ...)]特性后,输入非法内容时属性值仍为0,会触发范围验证,显示你自定义的提示,最终两个提示同时出现。

要将默认类型验证提示改为“数量字段必须是整数”并解决双重提示问题,推荐以下两种方案:


方案1:自定义验证属性(推荐)

创建一个同时处理类型转换和范围验证的自定义属性,既能替换默认提示,又能避免双重提示:

using System.ComponentModel.DataAnnotations;

public class IntegerRangeAttribute : ValidationAttribute
{
    public int Min { get; }
    public int Max { get; }

    public IntegerRangeAttribute(int min, int max)
    {
        Min = min;
        Max = max;
    }

    public override bool IsValid(object value)
    {
        // 处理空输入(若允许空可返回true)
        if (value == null || string.IsNullOrWhiteSpace(value.ToString()))
            return false;

        // 验证是否为整数
        if (!int.TryParse(value.ToString(), out int number))
            return false;

        // 验证范围
        return number >= Min && number <= Max;
    }

    public override string FormatErrorMessage(string name)
    {
        // 根据验证失败原因返回对应提示
        if (!int.TryParse(value?.ToString(), out _))
            return "数量字段必须是整数";
        
        return $"数量必须在{Min}到{Max}之间";
    }
}

在模型中使用该属性:

public class YourModel
{
    [IntegerRange(1, 9999999999)]
    public int Quantity { get; set; }

    public decimal Width { get; set; }
}

这样处理后:

  • 输入非整数内容时,显示“数量字段必须是整数”;
  • 输入超出范围的整数时,显示范围提示;
  • 不会出现双重提示。

方案2:覆盖内置验证消息(全局/字段级)

如果你只想替换默认的类型转换提示,不需要合并范围验证,可以通过Blazor的验证消息机制覆盖内置提示:

  1. 在Program.cs中配置本地化支持(即使不需要多语言,也可用于自定义提示):
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");

var supportedCultures = new[] { new CultureInfo("zh-CN") };
app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture("zh-CN"),
    SupportedCultures = supportedCultures,
    SupportedUICultures = supportedCultures
});
  1. 创建Resources文件夹,添加DataAnnotationsResources.zh-CN.resx资源文件,添加键值对:

    • 键:FieldMustBeNumeric,值:数量字段必须是整数
    • 如果需要针对特定字段,键可以设为Quantity_FieldMustBeNumeric,值同上
  2. 为避免双重提示,将Quantity改为可空整数int?,并添加[Required]特性(确保空输入时只触发Required提示,而非Range提示):

public class YourModel
{
    [Required(ErrorMessage = "数量不能为空")]
    [Range(1, 9999999999, ErrorMessage = "数量必须在1到9999999999之间")]
    public int? Quantity { get; set; }

    public decimal Width { get; set; }
}

这种方法适合全局替换验证提示,或者需要多语言支持的场景。


内容的提问来源于stack exchange,提问作者bilpor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:28:18