ASP.NET Core 中的模型验证
admin
2021-06-03ASP.NET Core 中的模型验证
本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP)
本文出自《从零开始学 ASP.NET Core 与 EntityFramework Core》目录
视频课程效果更佳:跨平台开发实战掌握 ASP.NET Core 与 EntityFramework Core
在本章节中,我们将通过示例来学习 ASP.NET Core 中的模型验证。
模型验证示例
请看下图,我们在创建学生信息的表单中,需要同时创建名字和邮箱两个字段。
必填的字段,如果未提供所需要的值,并且提交了表单,我们希望可以显示验证错误信息给用户,如下图所示:
如果提供的是无效的邮箱信息,我们希望显示无效的邮箱格式错误信息给用户,如下图所示:
要使Name
字段成为必填字段,请在Student
模型类的Name
属性上添加Required
属性。必需属性位于System.ComponentModel.DataAnnotations
命名空间中,所以我们需要补充对应的命名空间,参考以下代码。
///<summary>
///学生模型
///</summary>
public class Student
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public MajorEnum Major { get; set; }
public string Email { get; set; }
}
ModelState.IsValid 属性验证
- 提交表单时,将执行以下
Create()
操作方法 - 在创建学生表单视图中表单模型是 Student 类
- 提交表单时,模型绑定将 Post 请求的表单值映射到 Student 类的相应属性
- 在Name属性上添加了Required属性,它会判断 Name 中的值,如果该 Name 中的值为空,或者属性不存在,则会验证失败
- 使用
ModelState.IsValid
属性会检查验证是否失败或成功 - 如果验证失败,我们返回相同的视图,以便用户可以提供所需的数据并重新提交表单。
我们修改我们的Create()
代码后:
[HttpPost]
public IActionResult Create(Student student)
{
if (ModelState.IsValid)
{
Student newStudent = _studentRepository.Add(student);
return RedirectToAction("Details", new { id = newStudent.Id });
}
return View();
}
在视图中显示模型验证错误
要显示验证错误,请使用 asp-validation-for
和 asp-validation-summary
TagHelper。asp-validation-for
TagHelper 用于显示模型类的单个属性的验证消息。asp-validation-summary
TagHelper 用于显示验证错误的摘要信息。
要显示与 Student
类的 Name
属性关联的验证错误,请在<span>
元素上使用 asp-validation-for
TagHelper,如下所示。
<div class="form-group row">
<label asp-for="Name" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<input asp-for="Name" class="form-control" placeholder="请输入名字"/>
<span asp-validation-for="Name"></span>
</div>
</div>
要显示所有验证错误的摘要,请在<div>
元素上使用 asp-validation-summary
,如下所示。
<div asp-validation-summary="All"></div>
以上代码,我们可以添加在视图中<form>
属性下面。
asp-validation-summary
taghelper 可以用于以下情况的验证:
- All
- ModelOnly
- None
我们现在先讲值设置为All
,而对于他们三者之间的区别,我们在后面的章节中讨论他们。
自定义模型验证错误消息
默认情况下,Name
属性上的 Required
属性显示以下验证错误消息。
名字的字段是必需的。
如果要将验证错误消息更改为"请输入名字",可以使用 Required
属性的 ErrorMessage
属性执行此操作,如下所示:
public class Student
{
public int Id { get; set; }
[Required(ErrorMessage = "请输入名字")]
public string Name { get; set; }
public MajorEnum Major { get; set; }
public string Email { get; set; }
}
ASP.NET Core 内置模型验证属性
以下是 ASP.NET Core 中内置的一些验证属性
属性 | 作用 |
---|---|
Required | 指定该字段是必填的的 |
Range | 指定允许的最小值和最大值 |
MinLength | 使用 MinLength 指定字符串的最小长度 |
MaxLength | 使用 MinLength 指定字符串的最大长度 |
Compare | 比较模型的 2 个属性。例如,比较 Email 和 ConfirmEmail 属性 |
RegularExpression | 正则表达式 验证提供的值是否与正则表达式指定的模式匹配 |
显示属性
这不是验证属性。它的作用一般是用于增强视图中的显示作用。
例如,在 视图 中默认情况下,Email
字段的标签显示文本Email
,因为属性名称为Email
。
public class Student
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public MajorEnum Major { get; set; }
public string Email { get; set; }
}
如果您希望在视图中的标签显示 电子邮件
,请使用Display
属性
public class Student
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public MajorEnum Major { get; set; }
[Display(Name = "电子邮件")]
public string Email { get; set; }
}
使用多个模型验证属性
可以在属性上应用多个验证属性,只需要使用逗号将他们分隔开,如 Name
属性所示,当然你也可以将它们堆叠在一起,如 Email
属性所示。
public class Student
{
public int Id { get; set; }
[Required, MaxLength(50, ErrorMessage = "名字的长度不能超过50个字符")]
public string Name { get; set; }
public MajorEnum Major { get; set; }
[Display(Name = "电子邮件")]
[RegularExpression(@"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$",
ErrorMessage = "邮箱的格式不正确")]
[Required]
public string Email { get; set; }
}
自定义模型验证错误的颜色
如果我们要更改视图中模型验证错误的文字的颜色,请在具有asp-validation-for
和 asp-validation-summary
Taghelper 的<span>
>和 < div >
元素上使用 **Bootstrap **中text-danger
类
<div asp-validation-summary="All" class="text-danger"></div>
<span asp-validation-for="Name" class="text-danger"></span>
小结
最后我们通过 Display 属性将所有的 Name 属性修改为中文。
文章说明
如果您觉得我的文章质量还不错,欢迎打赏,也可以订阅我的视频哦
未得到授权不得擅自转载本文内容,52abp.com 保留版权
感谢您对我的支持