c# - ModelState 在非必需模型字段上返回 false

标签 c# asp.net-mvc asp.net-core-mvc

我有一个简单的 View 模型:

public record CreateViewModel
{
    [Required]
    [StringLength(
        250,
        ErrorMessage = "The {0} must be at least {2} characters long.",
        MinimumLength = 5
    )]
    public string Name { get; set; } = string.Empty;

    [StringLength(
        20,
        ErrorMessage = "The {0} must be at least {2} characters long."
    )]
    [Display(Name = "Phone Number")]
    public string AlternateContactPhoneNumber { get; set; } = string.Empty;
}

但由于某种原因,当我的 Controller 运行状态为:

if (!ModelState.IsValid)
{
    return View(model);
}

返回的是“电话号码”字段是必需的,但我在该模型属性上没有必需的数据注释。有人知道这是怎么回事吗?

最佳答案

可能在 .csproj 文件中的项目设置中,设置定义如下

<Nullable>enable</Nullable>

如果您使用的是 .Net6 及更高版本,此选项默认为 enable,这使得 string 类似于 value typesint 等默认情况下不能接受 null 值。要解决这个问题,您可以将其值设置为 ‍disable 或将string定义为nullable,如下所示:

public string? AlternateContactPhoneNumber { get; set; } = string.Empty;

我建议阅读这篇文章::Nullable reference types

关于c# - ModelState 在非必需模型字段上返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74186487/

相关文章:

c# - Rijndael 类加密然后解密数据引发 "Rijndael class to encrypt and then decrypt data"错误

c# - CaSTLe Windsor - 组件的登台与生产连接字符串参数

asp.net-core - ASP.NET 5 MVC6 中的@Ajax.ActionLink

asp.net-core-mvc - Asp.net MVC 将复选框数据放入 bool 值列表中

c# - 访问 IOption 类中 appsettings.json 文件中存储的键值对

c# - Fluentvalidation 的性能

c# - 您将如何重构此 LINQ 代码?

c# - 如何在 MVC 中检查用户是否经过身份验证

reactjs - 在 Heroku 上部署时找不到模块错误

c# - 如何获取网格新行的 RowHandle(当它生效时)(devexpress)