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

Blazor中Nullable Long字段空值验证默认消息去除咨询

问题分析与解决方案

默认消息的来源

这条"The value '' is not valid for 'NationalCode'."消息是模型绑定阶段的类型转换错误提示,和System.ComponentModel.DataAnnotations的验证属于两个独立流程:
当表单提交时,InputNumber组件会将输入框的空字符串传递给模型绑定器,绑定器尝试把空字符串转换为long?类型,转换失败后生成该默认错误。模型绑定流程先执行,绑定成功后才会触发DataAnnotations的验证逻辑。

禁用默认消息的方法

根据你的业务需求,分两种场景处理:

场景1:允许NationalCode为空(不需要必填验证)

只需让模型绑定器自动将空字符串转为null,避免类型转换失败。给NationalCode属性添加[DisplayFormat(ConvertEmptyStringToNull = true)]特性即可:

private sealed class InputModel
{
    [DisplayFormat(ConvertEmptyStringToNull = true)]
    public long? NationalCode { get; set; }
}

此时输入为空时,绑定器直接将值设为null,不会触发类型转换错误,默认消息自然消失。

场景2:要求NationalCode必须填写(需要必填验证)

注意AllowEmptyStrings = true仅对字符串类型有效,对long?类型无效,需按以下方式处理:

  1. 添加正确的[Required]特性,并保留DisplayFormat处理空字符串转换:
private sealed class InputModel
{
    [Required(ErrorMessage = "Please Enter your national code")]
    [DisplayFormat(ConvertEmptyStringToNull = true)]
    public long? NationalCode { get; set; }
}

DisplayFormat确保空字符串转为null,此时[Required]会检测到null值并触发自定义错误消息,不会出现模型绑定的默认错误。

  1. 若全局需要禁用这类绑定错误(谨慎使用,会影响所有字段):
    在Program.cs中配置模型绑定消息:
builder.Services.AddRazorPages()
    .AddMvcOptions(options =>
    {
        // 将值不能为空的绑定错误消息设为空,禁用该提示
        options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor(_ => string.Empty);
    });

内容的提问来源于stack exchange,提问作者Arash.Zandi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:58:22