提交表单时,在服务器端进行表单验证

EditForm 组件中,有三个事件可用于触发表单提交操作:

  • OnSubmit:无论验证结果如何,只要用户提交表单,就会触发此事件。
  • OnValidSubmit:当用户提交表单并且他们的输入验证通过时,将触发此事件。
  • OnInvalidSubmit:当用户提交表单并且他们的输入验证失败时,将触发此事件。

如果使用 OnSubmit事件,则不会触发其他两个事件。可以使用EditContext的Model参数来处理输入数据。如果要编写自己的逻辑来处理表单提交,请使用此事件。具体代码如下:

  1. @page "/AddBook"
  2. @using BlazorAppDemo.Models
  3. @using Microsoft.EntityFrameworkCore
  4. @inject IDbContextFactory<BookContext> dbFactory
  5.  
  6. <h3>AddBook</h3>
  7. <EditForm Model=@addBook OnSubmit="Save">
  8.  
  9. <DataAnnotationsValidator />
  10. <ValidationSummary />
  11.  
  12. <div>@Message</div>
  13.  
  14. <p> 图书名称:
  15. <InputText @bind-Value=addBook.Name></InputText>
  16. <ValidationMessage For="@(() => addBook.Name)" />
  17. </p>
  18.  
  19. <p>作者:
  20. <InputText @bind-Value=addBook.Author></InputText>
  21. <ValidationMessage For="@(() => addBook.Author)" />
  22. </p>
  23.  
  24. <p>出版日期:
  25. <InputDate @bind-Value=addBook.ReleaseDate></InputDate>
  26. </p>
  27. <p>价格:
  28.  
  29. <InputNumber @bind-Value=addBook.Price></InputNumber>
  30. </p>
  31. <p>类型:
  32.  
  33. <InputText @bind-Value=addBook.Type></InputText>
  34. <ValidationMessage For="@(() => addBook.Type)" />
  35. </p>
  36.  
  37. <p>总页数:
  38. <InputNumber @bind-Value=addBook.TotalPages></InputNumber>
  39. </p>
  40.  
  41. <p>库存数量:
  42. <InputNumber @bind-Value=addBook.StockQty></InputNumber>
  43. <ValidationMessage For="@(() => addBook.StockQty)" />
  44. </p>
  45.  
  46. <p>已租数量:
  47. <InputNumber @bind-Value=addBook.Qty></InputNumber>
  48. </p>
  49. <input type="submit" class="btn btn-primary" value="Save" />
  50.  
  51. </EditForm>
  52.  
  53. @code {
  54. private string Message = string.Empty;
  55. private static BookContext _context;
  56.  
  57. private Models.Book addBook = new Book();
  58.  
  59. protected override Task OnInitializedAsync()
  60. {
  61. _context = dbFactory.CreateDbContext();
  62. return base.OnInitializedAsync();
  63. }
  64.  
  65. private void Save(EditContext editContext)
  66. {
  67. bool dataIsValid = editContext.Validate();
  68.  
  69. if (!dataIsValid)
  70. {
  71. Message = "你编辑的图书信息校验不通过,请修改。";
  72. return;
  73. }
  74.  
  75. if (editContext.Model is not Book addBook)
  76. {
  77. Message = "你编辑的不是图书信息。";
  78. return;
  79. }
  80. _context.Add(editContext.Model);
  81. int cnt= _context.SaveChanges();
  82.  
  83. if (cnt>0)
  84.  
  85. {
  86. Message = "图书信息保存成功!";
  87.  
  88. }else
  89.  
  90. {
  91. Message = "图书信息保存失败!";
  92. }
  93.  
  94. }
  95. }

第十一,在Visual Studio 2022的菜单栏上,找到“调试—》开始调试”或是按F5键,Visual Studio 2022会生成BlazorAppDemo应用程序,并在浏览器中打开Home页面,我们使用鼠标点击左边的菜单栏上的“添加图书”菜单项,然后使用鼠标左键点击“保存”按钮,由于我们没有输入正确的数据,校验组件将会提示我们要输入的数据。如下图。在图中红框处,显示了我们在后台处理之后,返回到前端的提示信息。

第十二,如果改用 OnValidSubmit 和 OnInvalidSubmit这两个事件,则如果校验不通过则会触发OnInvalidSubmit事件,反之如果校验通过,则会触发OnValidSubmit事件。

  1. @page "/AddBook"
  2. @using BlazorAppDemo.Models
  3. @using Microsoft.EntityFrameworkCore
  4. @inject IDbContextFactory<BookContext> dbFactory
  5.  
  6. <h3>AddBook</h3>
  7.  
  8. <EditForm Model=@addBook OnValidSubmit=@ValidSubmitInfo OnInvalidSubmit=@InvalidSubmitInfo>
  9. <DataAnnotationsValidator />
  10. <ValidationSummary />
  11.  
  12. <div>@Message</div>
  13. <p> 图书名称:
  14. <InputText @bind-Value=addBook.Name></InputText>
  15. <ValidationMessage For="@(() => addBook.Name)" />
  16. </p>
  17. <p>作者:
  18. <InputText @bind-Value=addBook.Author></InputText>
  19. <ValidationMessage For="@(() => addBook.Author)" />
  20. </p>
  21.  
  22. <p>出版日期:
  23. <InputDate @bind-Value=addBook.ReleaseDate></InputDate>
  24. </p>
  25. <p>价格:
  26. <InputNumber @bind-Value=addBook.Price></InputNumber>
  27. </p>
  28. <p>类型:
  29. <InputText @bind-Value=addBook.Type></InputText>
  30. <ValidationMessage For="@(() => addBook.Type)" />
  31. </p>
  32. <p>总页数:
  33. <InputNumber @bind-Value=addBook.TotalPages></InputNumber>
  34. </p>
  35. <p>库存数量:
  36. <InputNumber @bind-Value=addBook.StockQty></InputNumber>
  37. <ValidationMessage For="@(() => addBook.StockQty)" />
  38. </p>
  39. <p>已租数量:
  40. <InputNumber @bind-Value=addBook.Qty></InputNumber>
  41. </p>
  42. <input type="submit" class="btn btn-primary" value="Save" />
  43.  
  44. </EditForm>
  45.  
  46. @code {
  47. private string Message = string.Empty;
  48.  
  49. private static BookContext _context;
  50. private Models.Book addBook = new Book();
  51. protected override Task OnInitializedAsync()
  52. {
  53. _context = dbFactory.CreateDbContext();
  54. return base.OnInitializedAsync();
  55. }
  56.  
  57. private void ValidSubmitInfo(EditContext editContext)
  58. {
  59.  
  60. if (editContext.Model is Book addBook)
  61. {
  62. Message = "你编辑的不是图书信息,校验通过。正在保存。"
  63.  
  64. }
  65. }
  66.  
  67. private void InvalidSubmitInfo(EditContext editContext)
  68. {
  69.  
  70. if (editContext.Model is Book addBook)
  71.  
  72. {
  73. Message = "你编辑的图书信息校验不通过,请修改。";
  74. }
  75. }
  76.  
  77. }

第十三,在Visual Studio 2022的菜单栏上,找到“调试—》开始调试”或是按F5键,Visual Studio 2022会生成BlazorAppDemo应用程序,并在浏览器中打开Home页面,我们使用鼠标点击左边的菜单栏上的“添加图书”菜单项,然后使用鼠标左键点击“保存”按钮,由于我们没有输入正确的数据,没有通过校验规则,页面重新显示表单(如果我们填写过数据,则会显示我们刚才填写的数据),同时页面上将会提示我们要输入的数据的提示信息。如下图。在图中红框处,显示了我们在后台处理之后,返回到前端的提示信息。

学习ASP.NET Core Blazor编程系列九——服务器端校验的更多相关文章

  1. 学习ASP.NET Core Blazor编程系列八——数据校验

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  2. 学习ASP.NET Core Blazor编程系列十——路由(上)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  3. 学习ASP.NET Core Blazor编程系列十——路由(中)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  4. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(上)

    学习ASP.NET Core Blazor编程系列一--综述 一.概述 Blazor 是一个生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 U ...

  5. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(中)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 四.创建一个Blazor应用程序 1. 第一种创 ...

  6. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(下)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  7. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(完)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  8. 022年9月12日 学习ASP.NET Core Blazor编程系列三——实体

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  9. 学习ASP.NET Core Blazor编程系列四——迁移

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

随机推荐

  1. Android 自定义View - 柱状波形图 wave view

    前言 柱状波形图是一种常见的图形.一个个柱子按顺序排列,构成一个波形图. 柱子的高度由输入数据决定.如果输入的是音频的音量,则可得到一个声波图. 在一些音频软件中,我们也可以左右拖动声波,来改变音频的 ...

  2. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(13)-Fiddler请求和响应断点调试

    1.简介 Fiddler有个强大的功能,可以修改发送到服务器的数据包,但是修改前需要拦截,即设置断点.设置断点后,开始拦截接下来所有网页,直到取消断点.这个功能可以在数据包发送之前,修改请求参数:在收 ...

  3. FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务

    FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务 前言 最近的工作中,需要将手机上的文件发送到公司的 FTP 的服务器.按照从前的思路,自然是,先将文件传到电脑,再由电脑上传 ...

  4. 熔断器-Hystrix。。。之降级方法

    与Feign的Fallback降级方法不同,这个hystrix降级方法是写在被调用方的 需要依赖: <dependency> <groupId>org.springframew ...

  5. 做自动化测试选择Python还是Java?

    你好,我是测试蔡坨坨. 今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言. 前言 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发展的 ...

  6. [报错]-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 ...

  7. [Python]-string-字符串

    字符串是Python中很常用的数据类型,此处记录一些典型用法并随时更新. split()方法 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串. 两个参数st ...

  8. 在Windows客户端自动设置AD用户头像

    Windows现在可以设置用户头像,并在开始菜单显示.如果你安装了Exchange或者Lync,那么可以在Outlook或者Skype里看到用户的头像.这个图片是存储在AD用户属性里的.对于桌面电脑的 ...

  9. ELK基于ElastAlert实现日志的微信报警

    文章转载自:https://mp.weixin.qq.com/s/W9b28CFBEmxBPz5bGd1-hw 教程pdf文件下载地址 https://files.cnblogs.com/files/ ...

  10. 使用 Shell 命令 分析服务器日志

    文章转载自:https://mp.weixin.qq.com/s/z2qF571m4JSSVi59D7V71g 1.查看有多少个IP访问: awk '{print $1}' log_file|sort ...