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

ASP.NET Core MVC中jQuery Validate默认标记输入框为必填的原因及解决方法

问题原因与解决方案

原因

在启用了可空引用类型(C# 8+默认启用)的ASP.NET Core项目中,模型的Question属性未标记为可空(string?),即便你用= string.Empty做了初始化,系统仍会将其视为非可空引用类型,自动为该属性添加[Required]验证规则。这会让前端生成带data-val-required属性的输入框,触发jQuery非侵入式验证的必填校验。

解决方案

你可以通过以下几种方式将字段设为非必填:

1. 标记属性为可空字符串

直接在Question属性类型后添加?,明确指定为可空引用类型:

using System.ComponentModel.DataAnnotations;

namespace MagicEightBall.Models
{
    public class EightBallModel
    {
        public string Answer { get; set; } = string.Empty;
        // 修改为可空字符串
        public string? Question { get; set; } = string.Empty;
    }
}

2. 全局禁用自动添加的Required验证

如果不想让所有非可空引用类型自动触发Required规则,可在Program.cs(或Startup.cs)中配置Mvc选项:

builder.Services.AddControllersWithViews(options =>
{
    // 关闭非可空引用类型的自动Required特性
    options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true;
});

3. 显式允许空字符串(可选)

若想保留非可空类型但允许提交空字符串,可添加[Required(AllowEmptyStrings = true)]属性(此方式不如标记可空直观):

[Required(AllowEmptyStrings = true)]
public string Question { get; set; } = string.Empty;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:27:28