.NET Core MVC 中的可选模型属性绑定

Rah*_*hra 2 c# asp.net-mvc .net-core asp.net-core

我创建了一个AccountModel具有以下属性的

public class AccountModel
{
    [Required]
    [EmailAddress]
    public string Email { get; set; }

    [Required]
    [StringLength(10, MinimumLength = 6)]
    public string Password { get; set; }

    [NotMapped] // Does not effect with your database
    [Compare("Password")]
    [BindRequired]
    public string ConfirmPassword { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

SignUp我正在尝试对和使用相同的模型SignIn。该模型非常适合注册,但是当我为SignIn我的模型使用相同的模型时,该模型变得无效。

我知道原因是因为我没有传递“确认密码”属性的值。我尝试跟随

  1. NULLABLE用“?”制作的 但它给了我警告(请参阅随附的屏幕截图) 在此输入图像描述

  2. 我也尝试过[BindRequired]注释,但也不起作用。

我正在使用 ASP.NET Core 3.1 并尝试使用单一模型进行登录和注册。

有什么解决办法吗?我正在学习 .NET Core 和 MVC,因此对这个主题的了解较少。

提前感谢您的帮助。

Sal*_*ari 5

根据其文档,这称为可空上下文

可空上下文可以对编译器如何解释引用类型变量进行细粒度控制。任何给定源代码行的可为空注释上下文要么启用,要么禁用。您可以将 C# 8.0 之前的编译器视为在禁用的可为空上下文中编译所有代码:任何引用类型都可以为 null。还可以启用或禁用可为空的警告上下文。可空警告上下文指定编译器使用其流分析生成的警告。

你可以像这样摆脱这个警告:

#nullable enable
    public string? ConfirmPassword { get; set; }
#nullable disable
Run Code Online (Sandbox Code Playgroud)

作为另一种解决方法,如果您希望始终在项目中消除此警告,则可以Nullable.csproj文件中添加该元素。右键单击您的项目并单击“编辑项目文件”,然后将Nullable元素添加到您的PropertyGroup部分,如下所示:

<PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <Nullable>enable</Nullable>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

您只需重新构建项目一次即可看到结果。