更新生成的页面

1.  Column 名 “ReleaseDate”显示修改为“Release Date”

     Models/Movie.cs 修改代码

         [Display(Name = "Release Date")]

         [DataType(DataType.Date)]

         public DateTime ReleaseDate { get; set; }

     [Display] : 指定字段的显示名称.

     [DataType] : 指定数据的类型 (Date).

2.  浏览 Pages/Movies

  ①. “编辑”、“详细信息”和“删除”链接是在 Pages/Movies/Index.cshtml 文件中由定位标记帮助程序生成的。

    定位标记帮助程序 : 标记帮助程序使服务器端代码可以在 Razor 文件中参与创建和呈现 HTML 元素。

    例 : 

      @foreach (var item in Model.Movie) {
        <tr>
          <td>
            @Html.DisplayFor(modelItem => item.Title)
          </td>
          <td>
            @Html.DisplayFor(modelItem => item.ReleaseDate)
          </td>
          <td>
            @Html.DisplayFor(modelItem => item.Genre)
          </td>
          <td>
            @Html.DisplayFor(modelItem => item.Price)
          </td>
          <td>
            <a asp-page="./Edit" asp-route-id="@item.ID">Edit</a> |
            <a asp-page="./Details" asp-route-id="@item.ID">Details</a> |
            <a asp-page="./Delete" asp-route-id="@item.ID">Delete</a>
          </td>
        </tr>
      }

    asp-route-id : 路由标识符。

    动态生成的链接通过查询字符串传递电影 ID。

3. 添加路由模板

  更新“编辑”、“详细信息”和“删除”Razor 页面以使用 {id:int} 路由模板。

  将Edit页面的页面指令从 @page 更改为 @page "{id:int}",其他页面仍为@page,可直观地看出差异

  运行应用,然后查看网页源代码。

  例:

    <a href="/Movies/Edit/5">Edit</a> |

    <a href="/Movies/Details?id=5">Details</a> |

    <a href="/Movies/Delete?id=5">Delete</a>

   访问页面路径:https://localhost:5001/Movies/Edit/3 可正常访问
   访问页面路径:https://localhost:5001/Movies/Edit 返回404

  将 ? 追加到路由约束

    即 @page "{id:int}" 修改为 @page "{id:int?}"(此处不进行Edit修改,将Detail页面修改为@page "{id:int?}"

             两种写法的区别:

      Edit ( @page "{id:int} ) 路径 : https://localhost:5001/Movies/Edit 不会运行到 Edit.cshtml.cs的OnGetAsync方法里,路由引擎返回 HTTP 404。
      Details ( @page "{id:int?}" ) 路径 : https://localhost:5001/Movies/Details 会运行到 Details.cshtml.cs的OnGetAsync方法里,返回 NotFound (HTTP 404)。

4. 查看并发异常处理

  查看 Pages/Movies/Edit.cshtml.cs 文件中的 OnPostAsync 方法:

    当一个客户端删除电影并且另一个客户端对电影发布更改时,前面的代码会检测并发异常。

    测试 catch 块:

  1. 在 catch (DbUpdateConcurrencyException) 上设置断点。
  2. 对电影选择“编辑”,进行更改,但不要输入“保存”。
  3. 在其他浏览器窗口中,选择同一电影的“删除”链接,然后删除此电影。
  4. 在之前的浏览器窗口中,将更改发布到电影。

    生产代码可能要检测并发冲突.

5. 发布和绑定审阅

  检查 Pages/Movies/Edit.cshtml.cs 文件:

    当对 Movies/Edit 页面(例如 https://localhost:5001/Movies/Edit/3)进行 HTTP GET 请求时:

      OnGetAsync 方法从数据库提取电影并返回 Page 方法

      Page 方法呈现 Pages/Movies/Edit.cshtmlRazor 页面。 

      Pages/Movies/Edit.cshtml 文件包含模型指令 @model RazorPagesMovie.Pages.Movies.EditModel,这使电影模型在页面上可用

      “编辑”表单中会显示电影的值.

    当发布 Movies/Edit 页面时:

      此页面上的表单值将绑定到 Movie 属性。 [BindProperty] 特性会启用模型绑定。

      如果模型状态中存在错误(例如,ReleaseDate 无法被转换为日期),则会使用已提交的值重新显示表单。

      如果没有模型错误,则电影已保存。

    “索引”、“创建”和“删除”Razor 页面中的 HTTP GET 方法遵循一个类似的模式。

    “创建”Razor 页面中的 HTTP POST OnPostAsync 方法遵循的模式类似于“编辑”Razor 页面中的 OnPostAsync 方法所遵循的模式。

posted @   大师兄被妖怪抓走了  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示