ASP.NET Core Razor Pages中的实体模型验证
admin
2022-03-04ASP.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-for
和asp-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-for
和asp-validation-summary
标签帮助器的<span>和<div>
。
<div asp-validation-summary="All" class="text-danger"></div>
<span asp-validation-for="Name" class="text-danger"></span>