学习ASP.NET Core Blazor编程系列九——服务器端校验
提交表单时,在服务器端进行表单验证
EditForm 组件中,有三个事件可用于触发表单提交操作:
- OnSubmit:无论验证结果如何,只要用户提交表单,就会触发此事件。
- OnValidSubmit:当用户提交表单并且他们的输入验证通过时,将触发此事件。
- OnInvalidSubmit:当用户提交表单并且他们的输入验证失败时,将触发此事件。
如果使用 OnSubmit事件,则不会触发其他两个事件。可以使用EditContext的Model参数来处理输入数据。如果要编写自己的逻辑来处理表单提交,请使用此事件。具体代码如下:
- @page "/AddBook"
- @using BlazorAppDemo.Models
- @using Microsoft.EntityFrameworkCore
- @inject IDbContextFactory<BookContext> dbFactory
- <h3>AddBook</h3>
- <EditForm Model=@addBook OnSubmit="Save">
- <DataAnnotationsValidator />
- <ValidationSummary />
- <div>@Message</div>
- <p> 图书名称:
- <InputText @bind-Value=addBook.Name></InputText>
- <ValidationMessage For="@(() => addBook.Name)" />
- </p>
- <p>作者:
- <InputText @bind-Value=addBook.Author></InputText>
- <ValidationMessage For="@(() => addBook.Author)" />
- </p>
- <p>出版日期:
- <InputDate @bind-Value=addBook.ReleaseDate></InputDate>
- </p>
- <p>价格:
- <InputNumber @bind-Value=addBook.Price></InputNumber>
- </p>
- <p>类型:
- <InputText @bind-Value=addBook.Type></InputText>
- <ValidationMessage For="@(() => addBook.Type)" />
- </p>
- <p>总页数:
- <InputNumber @bind-Value=addBook.TotalPages></InputNumber>
- </p>
- <p>库存数量:
- <InputNumber @bind-Value=addBook.StockQty></InputNumber>
- <ValidationMessage For="@(() => addBook.StockQty)" />
- </p>
- <p>已租数量:
- <InputNumber @bind-Value=addBook.Qty></InputNumber>
- </p>
- <input type="submit" class="btn btn-primary" value="Save" />
- </EditForm>
- @code {
- private string Message = string.Empty;
- private static BookContext _context;
- private Models.Book addBook = new Book();
- protected override Task OnInitializedAsync()
- {
- _context = dbFactory.CreateDbContext();
- return base.OnInitializedAsync();
- }
- private void Save(EditContext editContext)
- {
- bool dataIsValid = editContext.Validate();
- if (!dataIsValid)
- {
- Message = "你编辑的图书信息校验不通过,请修改。";
- return;
- }
- if (editContext.Model is not Book addBook)
- {
- Message = "你编辑的不是图书信息。";
- return;
- }
- _context.Add(editContext.Model);
- int cnt= _context.SaveChanges();
- if (cnt>0)
- {
- Message = "图书信息保存成功!";
- }else
- {
- Message = "图书信息保存失败!";
- }
- }
- }
第十一,在Visual Studio 2022的菜单栏上,找到“调试—》开始调试”或是按F5键,Visual Studio 2022会生成BlazorAppDemo应用程序,并在浏览器中打开Home页面,我们使用鼠标点击左边的菜单栏上的“添加图书”菜单项,然后使用鼠标左键点击“保存”按钮,由于我们没有输入正确的数据,校验组件将会提示我们要输入的数据。如下图。在图中红框处,显示了我们在后台处理之后,返回到前端的提示信息。
第十二,如果改用 OnValidSubmit 和 OnInvalidSubmit这两个事件,则如果校验不通过则会触发OnInvalidSubmit事件,反之如果校验通过,则会触发OnValidSubmit事件。
- @page "/AddBook"
- @using BlazorAppDemo.Models
- @using Microsoft.EntityFrameworkCore
- @inject IDbContextFactory<BookContext> dbFactory
- <h3>AddBook</h3>
- <EditForm Model=@addBook OnValidSubmit=@ValidSubmitInfo OnInvalidSubmit=@InvalidSubmitInfo>
- <DataAnnotationsValidator />
- <ValidationSummary />
- <div>@Message</div>
- <p> 图书名称:
- <InputText @bind-Value=addBook.Name></InputText>
- <ValidationMessage For="@(() => addBook.Name)" />
- </p>
- <p>作者:
- <InputText @bind-Value=addBook.Author></InputText>
- <ValidationMessage For="@(() => addBook.Author)" />
- </p>
- <p>出版日期:
- <InputDate @bind-Value=addBook.ReleaseDate></InputDate>
- </p>
- <p>价格:
- <InputNumber @bind-Value=addBook.Price></InputNumber>
- </p>
- <p>类型:
- <InputText @bind-Value=addBook.Type></InputText>
- <ValidationMessage For="@(() => addBook.Type)" />
- </p>
- <p>总页数:
- <InputNumber @bind-Value=addBook.TotalPages></InputNumber>
- </p>
- <p>库存数量:
- <InputNumber @bind-Value=addBook.StockQty></InputNumber>
- <ValidationMessage For="@(() => addBook.StockQty)" />
- </p>
- <p>已租数量:
- <InputNumber @bind-Value=addBook.Qty></InputNumber>
- </p>
- <input type="submit" class="btn btn-primary" value="Save" />
- </EditForm>
- @code {
- private string Message = string.Empty;
- private static BookContext _context;
- private Models.Book addBook = new Book();
- protected override Task OnInitializedAsync()
- {
- _context = dbFactory.CreateDbContext();
- return base.OnInitializedAsync();
- }
- private void ValidSubmitInfo(EditContext editContext)
- {
- if (editContext.Model is Book addBook)
- {
- Message = "你编辑的不是图书信息,校验通过。正在保存。"
- }
- }
- private void InvalidSubmitInfo(EditContext editContext)
- {
- if (editContext.Model is Book addBook)
- {
- Message = "你编辑的图书信息校验不通过,请修改。";
- }
- }
- }
第十三,在Visual Studio 2022的菜单栏上,找到“调试—》开始调试”或是按F5键,Visual Studio 2022会生成BlazorAppDemo应用程序,并在浏览器中打开Home页面,我们使用鼠标点击左边的菜单栏上的“添加图书”菜单项,然后使用鼠标左键点击“保存”按钮,由于我们没有输入正确的数据,没有通过校验规则,页面重新显示表单(如果我们填写过数据,则会显示我们刚才填写的数据),同时页面上将会提示我们要输入的数据的提示信息。如下图。在图中红框处,显示了我们在后台处理之后,返回到前端的提示信息。
学习ASP.NET Core Blazor编程系列九——服务器端校验的更多相关文章
- 学习ASP.NET Core Blazor编程系列八——数据校验
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列十——路由(上)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列十——路由(中)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(上)
学习ASP.NET Core Blazor编程系列一--综述 一.概述 Blazor 是一个生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 U ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(中)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 四.创建一个Blazor应用程序 1. 第一种创 ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(下)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(完)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 022年9月12日 学习ASP.NET Core Blazor编程系列三——实体
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列四——迁移
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
随机推荐
- Docker 08 部署Elasticsearch
参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...
- java-前端之css
css样式: <!-- 内联样式:在元素的style属性内写样式 --> <h2 style="color: red;">愿你单枪匹马,亦能所向披靡!< ...
- Reader和Writer区别final.finally.finalize区别
Reader和Writer是字符操作流,Writer是输出的,而Reader是输入的. 首先找到一个文件,比如:File file=new File("."+File.separa ...
- 【Java】学习路径58-TCP聊天-双向发送实现
这一章内容比较复杂(乱) 重点在于解决利用TCP协议实现双向传输. 其余的细节(比如end)等,不需要太在意. 但是我也把折腾经历写出来了,如果大家和我遇到了类似的问题,下文可以提供一个参考. 目标: ...
- awk5个使用场景
awk简介 首先要知道awk的使用场景,需了解awk有哪些优势与短板. 关于个人近期学习awk总结其优势: awk对文本的处理运算效率同比其他工具效率高很多(比shell的for循环高10倍以上,运算 ...
- 华为云计算灾备产品BCManager 及eBackup的组网方式
BCManager的作用 OceanStor BCManager是面向企业数据中心存储容灾业务的管理软件,实现容灾.双活.两地三中心等容灾环境的管理,具备多种数据库应用与虚拟化环境的容灾管理功能,简单 ...
- 【Git进阶】基于文件(夹)拆分大PR
背景 前段时间为了迁移一个旧服务到新项目,由此产生了一个巨大的PR,为了方便Code Review,最终基于文件夹,将其拆分成了多个较小的PR:现在这里记录下,后面可能还会需要. 演示 为了方便演示, ...
- MySQL InnoDB缓存
1. 背景 对于各种用户数据.索引数据等各种数据都是需要持久化存储到磁盘,然后以"页"为单位进行读写. 相对于直接读写缓存,磁盘IO的成本相当高昂. 对于读取的页面数据,并不是使用 ...
- [深度学习]-Dataset数据集加载
加载数据集dataloader from torch.utils.data import DataLoader form 自己写的dataset import Dataset train_set = ...
- ProxySQL(9):ProxySQL的查询缓存功能
文章转载自: https://www.cnblogs.com/f-ck-need-u/p/9314459.html ProxySQL支持查询缓存的功能,可以将后端返回的结果集缓存在自己的内存中,在某查 ...