我们将在表单中使用此实体,校验特性应用在实体类的属性上,并且将前端强制执行 。Required 特性表示属性必须具有一个值 。但是,用户可以随时输入空格对可以为 null 的类型进行校验约束 。从本质上来说,对于不能为 null 的值类型(如 decimal、int、float 和 DateTime),可以不添加 Required 特性 。
RegularExpression 特性限制用户可以输入的字符 。在上述代码中,Type字母(禁用空格、数字和特殊字符) 。
Range 特性将值限制在指定范围内 。
StringLength 特性设置字符串的最大长度,且可视情况设置最小长度 。
第八 , 在Visual Studio 2022的菜单栏上 , 找到“调试à开始调试”或是按F5键 , Visual Studio 2022会生成BlazorAppDemo应用程序,并在浏览器中打开Home页面 , 我们使用鼠标点击左边的菜单栏上的“添加图书”菜单项,然后使用鼠标左键点击“保存”按钮,会出现一个错误 , 如下图 。
文章插图
从上图中看出 , 校验好像没有起作用就直接保存到数据库了 , 这是因为我们没有在EditForm中没有添加DataAnnotationsValidator组件 。如果要显示校验不通过生成的提示消息 , 我们应该加一个ValidationSummary组件,这个组件用于显示表单中所有控件的有校验规则的提示消息集合 。我们来修改一下组件的代码,具体代码如下 。
<h3>AddBook</h3><EditForm Model=@addBook OnSubmit="Save"> <DataAnnotationsValidator /> <ValidationSummary /> <div>@Message</div> <p> 图书名称: <InputText @bind-Value=https://www.huyubaike.com/biancheng/addBook.Name>
作者:
出版日期:
价格:
类型:
总页数:
库存数量:
已租数量:
文章插图
Blazor的校验是在以下两个时间点上执行:
- 当用户按 Tab 键离开某个字段时,将执行字段验证 。字段验证可确保用户及早了解验证问题 。
- 当用户提交表单时 , 将执行模型验证 。模型验证可确保不会存储无效数据 。
如果想要将校验提示信息显示在输入框的旁边,需要在代码中添加 ValidationMessage 组件 。如果你不想要Blazor提供的默认信息,你可以在实体类的每个属性的特性中找到一个ErrorMessage属性,这个属性就是用于自己定义一些校验提示消息,校验的提示消息尽可能的对用户有所帮助 。代码如下所示 。
using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.Linq;using System.Threading.Tasks;namespace BlazorAppDemo.Models{ public class Book { private string name = String.Empty; private string author=String.Empty; [Key] public int ID { get; set; } [Required(ErrorMessage ="图书名称必须填写 , 图书名称不能超过50个字符 。")] [StringLength(50)] public string Name { get => name; set => name = value; } public DateTime ReleaseDate { get; set; } [Required(ErrorMessage = "作者必须填写,作者名不能超过40个字符 。"), StringLength(40)] public string Author { get => author; set => author = value; } public decimal Price { get; set; } /// <summary> /// 图书类型编号 /// </summary> [RegularExpression(@"^[a-zA-Z]*$"), Required(ErrorMessage = "图书类型必须填写,而且只能是A-Z的字母,最少是一个字母 , 最多10个字母 。"), MinLength(1),StringLength(10)] public string Type { get; set; } /// <summary> /// 页码 /// </summary> public int TotalPages { get; set; } /// <summary> /// 库存数量 /// </summary> [Range(2,30,ErrorMessage = "图书库存数量在2至30之间 。")] public int StockQty { get; set; } /// <summary> /// 已租数量 /// </summary> public int Qty { get; set; } }}
推荐阅读
- 4 .NET 6学习笔记——如何在.NET 6的Desktop App中使用Windows Runtime API
- Python学习三天计划-3
- 简读《ASP.NET Core技术内幕与项目实战》之3:配置
- 数据科学学习手札145 在Python中利用yarl轻松操作url
- .net core-利用PdfSharpCore和SkiaSharp.QrCode 添加PDF二维码页眉
- 11 微服务架构学习与思考:开源 API 网关02-以 Java 为基础的 API 网关详细介绍
- .net core -利用 BsonDocumentProjectionDefinition 和Lookup 进行 join 关联 MongoDB 查询
- Python学习三天计划-1
- .NET Core C#系列之XiaoFeng.Threading.JobScheduler作业调度
- 10 微服务架构学习与思考:微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍