更新生成的页面
1. Column 名 “ReleaseDate”显示修改为“Release Date”
Models/Movie.cs 修改代码
[
[
@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>
}
<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
块:
- 在
catch (DbUpdateConcurrencyException)
上设置断点。 - 对电影选择“编辑”,进行更改,但不要输入“保存”。
- 在其他浏览器窗口中,选择同一电影的“删除”链接,然后删除此电影。
- 在之前的浏览器窗口中,将更改发布到电影。
生产代码可能要检测并发冲突.
5. 发布和绑定审阅
检查 Pages/Movies/Edit.cshtml.cs
文件:
当对 Movies/Edit 页面(例如 https://localhost:5001/Movies/Edit/3
)进行 HTTP GET 请求时:
OnGetAsync
方法从数据库提取电影并返回 Page
方法
Page
方法呈现 Pages/Movies/Edit.cshtml
Razor 页面。
Pages/Movies/Edit.cshtml
文件包含模型指令 @model RazorPagesMovie.Pages.Movies.EditModel
,这使电影模型在页面上可用
“编辑”表单中会显示电影的值.
当发布 Movies/Edit 页面时:
此页面上的表单值将绑定到 Movie
属性。 [BindProperty]
特性会启用模型绑定。
如果模型状态中存在错误(例如,ReleaseDate
无法被转换为日期),则会使用已提交的值重新显示表单。
如果没有模型错误,则电影已保存。
“索引”、“创建”和“删除”Razor 页面中的 HTTP GET 方法遵循一个类似的模式。
“创建”Razor 页面中的 HTTP POST OnPostAsync
方法遵循的模式类似于“编辑”Razor 页面中的 OnPostAsync
方法所遵循的模式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!