【问题标题】:Optional Model Properties Binding in .NET Core MVC.NET Core MVC 中的可选模型属性绑定
【发布时间】:2020-04-26 05:27:18
【问题描述】:

我创建了一个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; }
}

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

我知道原因是因为我没有传递 Confirm Password 属性的值。我试过了

  1. 我使用“?”创建了NULLABLE但它给了我警告(见附件截图)

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

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

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

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    这称为可空上下文,基于其documentation

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

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

    #nullable enable
        public string? ConfirmPassword { get; set; }
    #nullable disable
    

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

    <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      相关资源
      最近更新 更多