学习ASP.NET Core Blazor编程系列十四——修改

女爷i 2024-03-16 13:18 163阅读 0赞

通过前面几篇文章的学习,我们的图书修改页面已经能正常运行了,但现在的呈现效果不是很理想,主要标题显示的是英文。我们不想看到的时间(如下图所示0:00:00),并且希望把“ReleaseDate”修改成“出版日期”。现在的程序运行效果如下图。

b84086357eeaa109283722e6e2da2104.png

本文所实现的图书信息修改功能,在前面的路由篇中已经实现了,本文只是将其拿出来,单独讲解一下。

  1. 我们在Visual Studio 2022的解决方案资源管理器中打开Pages/BookIndex.razor文件,修改代码如下:

e3113e15e4f706d57aea9460c4940d97.gif

  1. @page "/BookIndex"
  2. @using BlazorAppDemo.Models
  3. @using Microsoft.EntityFrameworkCore
  4. @inject IDbContextFactory<BookContext> dbFactory
  5. @inject NavigationManager NavigationManager
  6. <PageTitle>图书列表</PageTitle>
  7. <h3>图书列表</h3>
  8. <table class="table-responsive" width="90%">
  9. <tr><td>书名</td>
  10. <td>作者</td>
  11. <td>价格</td>
  12. <td>出版日期</td>
  13. <td>库存数量</td>
  14. <td>已租数量</td>
  15. <td>操作</td>
  16. </tr>
  17. @foreach (var item in books)
  18. {
  19. <tr>
  20. <td>@item.Name</td>
  21. <td>@item.Author</td>
  22. <td>@item.Price</td>
  23. <td>@item.ReleaseDate.ToShortDateString()</td>
  24. <td>@item.StockQty</td>
  25. <td>@item.Qty</td>
  26. <td><a href="/AddBook?Id=@item.ID">编辑</a>
  27. <button id="edit" class="btn btn-primary" @οnclick="@(e => EditBook(e, @item.ID))">修改</button>
  28. </td>
  29. </tr>
  30. }
  31. </table>
  32. @code {
  33. private static BookContext _context;
  34. private List<Book> books = new List<Book>();
  35. protected override async Task OnInitializedAsync()
  36. {
  37. _context = dbFactory.CreateDbContext();
  38. books=_context.Book.ToList();
  39. await base.OnInitializedAsync();
  40. }
  41. public void EditBook(MouseEventArgs e ,int Id)
  42. {
  43. NavigationManager.NavigateTo("/AddBook?Id="+Id.ToString());
  44. }
  45. }

e03836247e5f6ed6ad895cf689b5d68b.gif

2.在Visual Studio 2022的解决方案资源管理器中,找到 AddBook.razor 组件,使用鼠标左键双击,在文本编辑器中打开。修改代码如下:

be8ab5149f5dcd6bc80ad8aee26f2146.gif

  1. @page "/AddBook"
  2. @using BlazorAppDemo.Models
  3. @using Microsoft.EntityFrameworkCore
  4. @inject IDbContextFactory<BookContext> dbFactory
  5. @inject NavigationManager NavigationManager
  6. <h3>AddBook</h3>
  7. <EditForm Model=@addBook OnValidSubmit=@ValidSubmitInfo OnInvalidSubmit=@InvalidSubmitInfo>
  8. <DataAnnotationsValidator />
  9. <ValidationSummary />
  10. <div>@Message</div>
  11. <p> 图书名称:
  12. <InputText @bind-Value=addBook.Name></InputText>
  13. <ValidationMessage For="@(() => addBook.Name)" />
  14. </p>
  15. <p>作者:
  16. <InputText @bind-Value=addBook.Author></InputText>
  17. <ValidationMessage For="@(() => addBook.Author)" />
  18. </p>
  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. public string Id { get; set; }
  51. protected override void OnParametersSet()
  52. {
  53. var query = new Uri(NavigationManager.Uri).Query;
  54. var queryDic = Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(query);
  55. if (queryDic.Count > 0)
  56. {
  57. Id = queryDic["Id"].ToString() ?? "0";
  58. if (!string.IsNullOrEmpty(Id))
  59. {
  60. if (Id != "0")
  61. {
  62. int iId = int.Parse(Id);
  63. var book = _context.Book.Find(iId);
  64. if (book != null)
  65. {
  66. addBook = book;
  67. }
  68. }
  69. }
  70. }
  71. }
  72. private void ValidSubmitInfo(EditContext editContext)
  73. {
  74. if (editContext.Model is not Book addBook)
  75. {
  76. Message = "你编辑的不是图书信息,校验通过。正在保存。";
  77. }
  78. Save(editContext);
  79. }
  80. private void InvalidSubmitInfo(EditContext editContext)
  81. {
  82. if (editContext.Model is not Book addBook)
  83. {
  84. Message = "你编辑的图书信息校验不通过,请修改。";
  85. }
  86. }
  87. private void Save(EditContext editContext)
  88. {
  89. bool dataIsValid = editContext.Validate();
  90. if (!dataIsValid)
  91. {
  92. Message = "你编辑的图书信息校验不通过,请修改。";
  93. return;
  94. }
  95. if (editContext.Model is not Book addBook)
  96. {
  97. Message = "你编辑的不是图书信息。";
  98. return;
  99. }
  100. if (string.IsNullOrEmpty(Id) || Id == "0" )
  101. {
  102. _context.Add(editContext.Model);
  103. }
  104. int cnt= _context.SaveChanges();
  105. if (cnt>0)
  106. {
  107. Message = "图书信息保存成功!";
  108. }else
  109. {
  110. Message = "图书信息保存失败!";
  111. }
  112. }
  113. }

2467ebcebdc30299381bac53d7e73f06.gif

  1. 在Visual Studio 2022的菜单栏上,找到“调试à开始调试”或是按F5键,Visual Studio 2022会生成BlazorAppDemo应用程序,并在浏览器中打开Home页面,我们我们使用鼠标左键点击左边菜单上的“图书列表”菜单项,浏览器会显示我们修改过的图书列表页面。如下图。

b929304e3a91539626ca244d238fea8d.png

4.在浏览器的图书列表页面,将鼠标指针悬停在“编辑”按钮上以查看,链接背后的URL值。使用鼠标左键点击我们要修改的图书信息的“编辑”按钮,浏览器会自动跳转到AddBook页面,并将我们需要修改的图书信息显示出来。如下图。

92c790ff19fa9c891ee74bd2ed57b370.png

5.在AddBook页面中的“类型”与“已租数量”中分别填入“A”与“2”,然后使用鼠标点击“保存”按钮。如下图。

22e4f5b8f3869b29d24a5406fcd84fcf.png

发表评论

表情:
评论列表 (有 0 条评论,163人围观)

还没有评论,来说两句吧...

相关阅读