为什么我的模型属性要对[Required]进行验证,即使我没有显式地将其放入我的模型类?在前端的表单中,如果我将MiddleName输入留空或保持不变,它会显示一个错误

中间名为必填项

我的模型属性如下所示

//this is from my EmployeeModel
[Column("MiddleName")]
[StringLength(50, ErrorMessage = "Maximum of 50 characters and minimum of 2 characters.", MinimumLength = 2)]
public string MiddleName { get; set; }

// and this is from the view (I used template/scaffolded item , with models and context selected, this is for Insert)
<div class="form-group">
     <label asp-for="MiddleName" class="control-label"></label>
     <input asp-for="MiddleName" class="form-control" />
     <span asp-validation-for="MiddleName" class="text-danger"></span>
</div>

我已经try 在属性中设置[Required(AllowEmptyStrings = true)],但这与我的字符串长度验证冲突

推荐答案

您应该记住,有客户端验证和服务器端验证.

[StringLength]属性应用于属性将导致将data-val-length-maxdata-val-length-min属性添加到MiddleName属性的<input>标记中,这将引发客户端验证.

To see these attributes see the generated HTML document: right click in the browser and select 100 line.

但是,如果[Required]属性没有应用或使用[ValidateNever]属性,则服务器端将不会对此类属性执行验证.因此,即使属性包含不正确的值,ModelState.IsValid也将保持true.

要允许使用空字符串,请键入nullable:

public string? MiddleName { get; set; }

若要启用nullable类型,项目文件应包含<Nullable>enable</Nullable>行.例如:

<PropertyGroup>
    <TargetFramework>net7.0</TargetFramework>
    <Nullable>enable</Nullable>
</PropertyGroup>

ASP.NET核心MVC

Csharp相关问答推荐

System.文本.Json现在总是需要无参数构造函数吗?

Blazor:计算值或保留为默认值

当Visual Studio处于升级管理模式时,无法安装Torch运行时

为什么xslWriter不总是按照xslWriterSet中指定的格式格式化该文档?

将列表字符串映射为逗号分隔字符串<>

在C#WinUI中,一个关于System的崩溃."由于未知原因导致执行不例外"

使用C#中的SDK在Microsoft Graph API上使用SubscribedSkus的问题

Blazor EventCallback<;MyType<;T>;>;

Blazor Fluent UI DialogService,<;FluentDialogProvider/>;错误

WPF DataGrid文件名列,允许直接输入文本或通过对话框按键浏览

源代码生成器:CS8795分部方法';Class1.GetS2(字符串)';必须有实现部分,因为它有可访问性修饰符?

MSI无法将快捷方式添加到启动文件夹

此异步方法在重写方法中缺少等待运算符警告

将J数组转换为列表,只保留一个嵌套的JToken

如何使用IHostedService添加数据种子方法

无效的Zip文件-Zip存档

在Unity C#中按键点击错误的参数

将文本从剪贴板粘贴到RichTextBox时,新文本不会在RichTextBox ForeColor中着色

.NET6最小API:操作.MapGet之后的响应

是否在异步方法中避免Span<;T>;.ToArray()?