ASP.NET Core Razor Pages中的实体模型验证

admin
admin
2022-03-04
分享:

ASP.NET Core Razor Pages中的实体模型验证

导航:

在本视频中,我们将讨论ASP.NET Core Razor Pages中的模型验证。让我们通过一个例子来理解这一点。

Razor Pages模型验证示例

我们需要在表单“编辑学生”页面上,同时输入姓名和电子邮件,他们都是必填字段。如果未提供所需的值,并且提交了 Razor Pages,我们希望显示所需的验证错误,如下所示。

要创建字段(必填字段),请在模型类的相应属性上应用Required属性。

安装 Microsoft.AspNetCore.Mvc.DataAnnotations NuGet 包

Student模型类在单独的类库项目中。

必需的属性位于System.ComponentModel.DataAnnotations命名空间中。此命名空间在Microsoft.AspNetCore.Mvc.DataAnnotations NuGet包中。

使用NuGet软件包管理器安装它。要进入NuGet软件包管理器,请在解决方案资源管理器中右键单击项目名称,然后选择System.ComponentModel.DataAnnotations NuGet软件包。

    <PackageReference Include="System.ComponentModel.Annotations" Version="6.0.0-preview.3.21201.4" />

在 Razor Pages中设置UI字段为必填

我们要同时填写姓名和电子邮件字段。因此,用Required属性装饰这两个属性。

要使“名称”字段成为必填字段,请在Student模型类的Name属性上应用Required属性。必需的属性位于System.ComponentModel.DataAnnotations命名空间中。

public class Student
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public string Email { get; set; }
    public string PhotoPath { get; set; }
        public MajorEnum Major { get; set; }
}

Razor Pages的表单验证

  • 单击“更新”按钮后,将提交 Razor Pages
  • 模型绑定将发布的表单值映射到Student模型类的相应属性
  • 使用Student类的Name属性上的Required属性,如果不存在Name属性的值,则验证失败
  • 使用ModelState.IsValid属性检查验证是否失败或成功
  • 如果验证失败,我们将返回相同的 Razor Pages,以便用户可以提供所需的数据并重新提交表单

public IActionResult OnPost()
{
    if (ModelState.IsValid)
    {
        if (Photo != null)
        {
            if (Student.PhotoPath != null)
            {
                string filePath = Path.Combine(webHostEnvironment.WebRootPath,
                    "images", Student.PhotoPath);
                System.IO.File.Delete(filePath);
            }

            Student.PhotoPath = ProcessUploadedFile();
        }

        Student = studentRepository.Update(Student);
        return RedirectToPage("Index");
    }
    return Page();
}

在 Razor Pages中显示验证错误

要显示验证错误,请使用asp-validation-forasp-validation-summary标记助手。 asp-validation-for标记帮助程序显示模型类单个属性的验证消息

asp-validation-summary标记帮助器显示验证错误的摘要。 要显示与Student类的Name属性关联的验证错误,请在<span>元素上使用asp-validation-for标记助手,如下所示。


 <div class="form-group row">

 <label asp-for="Student.Name" class="col-sm-2 col-form-label">
</label>

 <div class="col-sm-10">
<input asp-for="Student.Name" class="form-control" placeholder="Name">
<span asp-validation-for="Student.Name"  ></span>
 </div>

</div>

要显示所有验证错误的摘要,请在<div>元素上使用asp-validation-summary标记帮助器,如下所示。

<div asp-validation-summary="All"></div>

Razor Pages中的自定义验证错误消息


   public class Student
    {
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
        public MajorEnum Major { get; set; }
        [Required]
        public string Email { get; set; }
        public string PhotoPath { get; set; }

    }

默认情况下,Name属性上的Required属性显示以下验证错误消息。

The Name field is required.如果要将验证错误消息更改为“ Name is required”,则可以使用Required属性的ErrorMessage属性来进行更改,如下所示。

  public class Student
    {
        public int Id { get; set; }
        [Required(ErrorMessage = "请输入名字")]
        public string Name { get; set; }
        public MajorEnum Major { get; set; }
        [Required]
        public string Email { get; set; }
        public string PhotoPath { get; set; }

    }

AP.NET Core中的内置模型验证属性

以下是 ASP.NET Core 中内置的一些验证属性

属性 作用
Required 指定该字段是必填的的
Range 指定允许的最小值和最大值
MinLength 使用 MinLength 指定字符串的最小长度
MaxLength 使用 MinLength 指定字符串的最大长度
Compare 比较模型的 2 个属性。例如,比较 Email 和 ConfirmEmail 属性
RegularExpression 正则表达式 验证提供的值是否与正则表达式指定的模式匹配

显示属性

这不是验证属性。它通常用于UI中的显示目的。

例如,默认情况下,在UI中,“Email”标签的字段显示文本“Email”,因为属性名称为“Email”。


public class Student
{
        public int Id { get; set; }
        [Required(ErrorMessage = "请输入名字")]
        public string Name { get; set; }
        public MajorEnum Major { get; set; }
        [Required]
        public string Email { get; set; }
        public string PhotoPath { get; set; }
}

如果您希望标签显示电子邮件,请使用显示属性.

public class Student
{
    public int Id { get; set; }
   [Required(ErrorMessage = "请输入名字"), MaxLength(50, ErrorMessage = "名字的长度不能超过50个字符")]
        [Display(Name = "名字")]
        public string Name { get; set; }
        [Required]
        [Display(Name = "专业信息")]
        public MajorEnum Major { get; set; }

        [Display(Name = "电子邮件")]
        [RegularExpression(@"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$",
        ErrorMessage = "邮箱的格式不正确")]
        [Required(ErrorMessage = "请输入邮箱地址")]
        public string Email { get; set; }
        [Display(Name = "照片信息")]
        public string PhotoPath { get; set; }
}

模型验证错误颜色

要修改页面上,我们模型验证错误的颜色,可以使用Bootstrap提供的样式表中的text-danger的类元素,将他们添加到asp-validation-forasp-validation-summary标签帮助器的<span>和<div>


<div asp-validation-summary="All" class="text-danger"></div>
<span asp-validation-for="Name" class="text-danger"></span>