学习ASP.NET Core Blazor编程系列九——服务器端校验

打印 上一主题 下一主题

主题 847|帖子 847|积分 2541

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

学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(完)学习ASP.NET Core Blazor编程系列三——实体学习ASP.NET Core Blazor编程系列四——迁移学习ASP.NET Core Blazor编程系列五——列表页面学习ASP.NET Core Blazor编程系列六——初始化数据学习ASP.NET Core Blazor编程系列七——新增图书学习ASP.NET Core Blazor编程系列八——数据校验 
提交表单时,在服务器端进行表单验证

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


  • OnSubmit:无论验证结果如何,只要用户提交表单,就会触发此事件。
  • OnValidSubmit:当用户提交表单并且他们的输入验证通过时,将触发此事件。
  • OnInvalidSubmit:当用户提交表单并且他们的输入验证失败时,将触发此事件。
       如果使用 OnSubmit事件,则不会触发其他两个事件。可以使用EditContext的Model参数来处理输入数据。如果要编写自己的逻辑来处理表单提交,请使用此事件。具体代码如下:
  1. @page "/AddBook"
  2. @using BlazorAppDemo.Models
  3. @using Microsoft.EntityFrameworkCore
  4. @inject IDbContextFactory<BookContext> dbFactory
  5. <h3>AddBook</h3>
  6. <EditForm Model=@addBook OnSubmit="Save">
  7.     <DataAnnotationsValidator />
  8.     <ValidationSummary />
  9.     @Message
  10.     <p> 图书名称:
  11.     <InputText @bind-Value=addBook.Name></InputText>
  12.         <ValidationMessage For="@(() => addBook.Name)" />
  13.     </p>
  14.     <p>作者:
  15.     <InputText @bind-Value=addBook.Author></InputText>
  16.         <ValidationMessage For="@(() => addBook.Author)" />
  17.     </p>
  18.   
  19.     <p>出版日期:
  20.     <InputDate @bind-Value=addBook.ReleaseDate></InputDate>
  21.      </p>
  22.     <p>价格:
  23.     <InputNumber @bind-Value=addBook.Price></InputNumber>
  24.      </p>
  25.     <p>类型:
  26.      <InputText @bind-Value=addBook.Type></InputText>
  27.         <ValidationMessage For="@(() => addBook.Type)" />
  28.       </p>
  29.     <p>总页数:
  30.     <InputNumber @bind-Value=addBook.TotalPages></InputNumber>
  31.      </p>
  32.     <p>库存数量:
  33.     <InputNumber @bind-Value=addBook.StockQty></InputNumber>
  34.         <ValidationMessage For="@(() => addBook.StockQty)" />
  35.      </p>
  36.     <p>已租数量:
  37.     <InputNumber @bind-Value=addBook.Qty></InputNumber>
  38.     </p>
  39.     <input type="submit" class="btn btn-primary" value="Save" />
  40. </EditForm>
  41. @code {
  42.     private string Message = string.Empty;
  43.     private static BookContext _context;
  44.     private Models.Book addBook = new Book();
  45.     protected override Task OnInitializedAsync()
  46.     {
  47.         _context = dbFactory.CreateDbContext();
  48.         return base.OnInitializedAsync();
  49.     }
  50.     private void Save(EditContext editContext)
  51.     {
  52.         bool dataIsValid = editContext.Validate();
  53.         if (!dataIsValid)
  54.         {
  55.             Message = "你编辑的图书信息校验不通过,请修改。";
  56.             return;
  57.         }
  58.         if (editContext.Model is not Book addBook)
  59.         {
  60.             Message = "你编辑的不是图书信息。";
  61.             return;
  62.         }
  63.        _context.Add(editContext.Model);
  64.         int cnt=  _context.SaveChanges();
  65.         if (cnt>0)
  66.         {
  67.       Message = "图书信息保存成功!";
  68.   
  69.         }else
  70.        {
  71.             Message = "图书信息保存失败!";
  72.         }
  73.   
  74.     }
  75. }
复制代码
        第十一,在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. <h3>AddBook</h3>
  6. <EditForm Model=@addBook OnValidSubmit=@ValidSubmitInfo  OnInvalidSubmit=@InvalidSubmitInfo>
  7.     <DataAnnotationsValidator />
  8.     <ValidationSummary />
  9.     @Message
  10.     <p> 图书名称:
  11.     <InputText @bind-Value=addBook.Name></InputText>
  12.         <ValidationMessage For="@(() => addBook.Name)" />
  13.     </p>
  14.     <p>作者:
  15.     <InputText @bind-Value=addBook.Author></InputText>
  16.         <ValidationMessage For="@(() => addBook.Author)" />
  17.     </p>
  18.    
  19.     <p>出版日期:
  20.     <InputDate @bind-Value=addBook.ReleaseDate></InputDate>
  21.      </p>
  22.     <p>价格:
  23.     <InputNumber @bind-Value=addBook.Price></InputNumber>
  24.      </p>
  25.     <p>类型:
  26.      <InputText @bind-Value=addBook.Type></InputText>
  27.         <ValidationMessage For="@(() => addBook.Type)" />
  28.       </p>
  29.     <p>总页数:
  30.     <InputNumber @bind-Value=addBook.TotalPages></InputNumber>
  31.      </p>
  32.     <p>库存数量:
  33.     <InputNumber @bind-Value=addBook.StockQty></InputNumber>
  34.         <ValidationMessage For="@(() => addBook.StockQty)" />
  35.      </p>
  36.     <p>已租数量:
  37.     <InputNumber @bind-Value=addBook.Qty></InputNumber>
  38.     </p>
  39.    <input type="submit" class="btn btn-primary" value="Save" />
  40. </EditForm>
  41. @code {
  42.     private string Message = string.Empty;
  43.     private static BookContext _context;
  44.     private Models.Book addBook = new Book();
  45.     protected override Task OnInitializedAsync()
  46.     {
  47.         _context = dbFactory.CreateDbContext();
  48.         return base.OnInitializedAsync();
  49.     }
  50.     private void ValidSubmitInfo(EditContext editContext)
  51.     {
  52.         if (editContext.Model is  Book addBook)
  53.         {
  54.             Message = "你编辑的不是图书信息,校验通过。正在保存。"
  55.            
  56.         }
  57.     }
  58.     private void InvalidSubmitInfo(EditContext editContext)
  59.     {
  60.         if (editContext.Model is  Book addBook)
  61.      
  62.         {
  63.             Message = "你编辑的图书信息校验不通过,请修改。";
  64.         }
  65.     }
  66. }
复制代码
       第十三,在Visual Studio 2022的菜单栏上,找到“调试—》开始调试”或是按F5键,Visual Studio 2022会生成BlazorAppDemo应用程序,并在浏览器中打开Home页面,我们使用鼠标点击左边的菜单栏上的“添加图书”菜单项,然后使用鼠标左键点击“保存”按钮,由于我们没有输入正确的数据,没有通过校验规则,页面重新显示表单(如果我们填写过数据,则会显示我们刚才填写的数据),同时页面上将会提示我们要输入的数据的提示信息。如下图。在图中红框处,显示了我们在后台处理之后,返回到前端的提示信息。  
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表