学习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编程系 ...
随机推荐
- Android 自定义View - 柱状波形图 wave view
前言 柱状波形图是一种常见的图形.一个个柱子按顺序排列,构成一个波形图. 柱子的高度由输入数据决定.如果输入的是音频的音量,则可得到一个声波图. 在一些音频软件中,我们也可以左右拖动声波,来改变音频的 ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(13)-Fiddler请求和响应断点调试
1.简介 Fiddler有个强大的功能,可以修改发送到服务器的数据包,但是修改前需要拦截,即设置断点.设置断点后,开始拦截接下来所有网页,直到取消断点.这个功能可以在数据包发送之前,修改请求参数:在收 ...
- FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务
FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务 前言 最近的工作中,需要将手机上的文件发送到公司的 FTP 的服务器.按照从前的思路,自然是,先将文件传到电脑,再由电脑上传 ...
- 熔断器-Hystrix。。。之降级方法
与Feign的Fallback降级方法不同,这个hystrix降级方法是写在被调用方的 需要依赖: <dependency> <groupId>org.springframew ...
- 做自动化测试选择Python还是Java?
你好,我是测试蔡坨坨. 今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言. 前言 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发展的 ...
- [报错]-RuntimeError: Input type (torch.cuda.HalfTensor) and weight type (torch.cuda.FloatTensor) should be the same
RuntimeError: Input type (torch.cuda.HalfTensor) and weight type (torch.cuda.FloatTensor) should be ...
- [Python]-string-字符串
字符串是Python中很常用的数据类型,此处记录一些典型用法并随时更新. split()方法 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串. 两个参数st ...
- 在Windows客户端自动设置AD用户头像
Windows现在可以设置用户头像,并在开始菜单显示.如果你安装了Exchange或者Lync,那么可以在Outlook或者Skype里看到用户的头像.这个图片是存储在AD用户属性里的.对于桌面电脑的 ...
- ELK基于ElastAlert实现日志的微信报警
文章转载自:https://mp.weixin.qq.com/s/W9b28CFBEmxBPz5bGd1-hw 教程pdf文件下载地址 https://files.cnblogs.com/files/ ...
- 使用 Shell 命令 分析服务器日志
文章转载自:https://mp.weixin.qq.com/s/z2qF571m4JSSVi59D7V71g 1.查看有多少个IP访问: awk '{print $1}' log_file|sort ...