上一篇 添加基架 Razor页面的介绍
1. Pages/Movies/Index.cshtml.cs
页面模型 : Razor 页面派生自 PageModel
private readonly RazorPagesMovie.Data.RazorPagesMovieContext _context;
public IndexModel(RazorPagesMovie.Data.RazorPagesMovieContext context)
{ _context = context; }
上述构造函数 将 RazorPagesMovieContext 通过依赖关系注入添加到页面
public async Task OnGetAsync()
{ Movie = await _context.Movie.ToListAsync(); }
这个函数 微软给出的解释是 : 对页面发出请求时,OnGetAsync
方法向 Razor 页面返回影片列表。 OnGetAsync
或 OnGet
在 Razor 页面上调用,以初始化该页面的状态
个人理解 应该就是 页面初始化加载 运行该函数,待验证该理解...
当 OnGet
返回 void
或 OnGetAsync
返回 Task
时,不使用任何返回语句
例:
① public void OnGet()
{ }
② public async Task OnGetAsync()
{ Movie = await _context.Movie.ToListAsync(); }
当返回类型是 IActionResult 或 Task<IActionResult>
时,必须提供返回语句
例 : Pages/Movies/Create.cshtml.cs
OnPostAsync
方法
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid) { return Page(); }
_context.Movie.Add(Movie);
await _context.SaveChangesAsync();
return RedirectToPage("./Index");
}
检查 Pages/Movies/Index.cshtml
Razor 页面:
Razor 可以从 HTML 转换为 C# 或 Razor 特定标记。 当 @
符号后跟 Razor 保留关键字时,它会转换为 Razor 特定标记,否则会转换为 C#
2. @page 指令
@page Razor 指令将文件转换为一个 MVC 操作,这意味着它可以处理请求。 @page
必须是页面上的第一个 Razor 指令。 @page
和 @model
是转换为 Razor 特定标记的示例
3. @model指令
@model
指令指定传递到 Razor 页面的模型类型
例 :在前面的示例中,@model
行使 PageModel
派生的类可用于 Razor 页面
@page
@model RazorPagesMovie.Pages.Movies.IndexModel
4. 布局页
每页显示相同的菜单布局
菜单布局在 Pages/Shared/_Layout.cshtml
文件中实现
Pages/Shared/_Layout.cshtml
文件
布局模板允许 HTML 容器具有如下布局:
- 在一个位置指定。
- 应用于站点中的多个页面。
@RenderBody 是显示全部页面专用视图的占位符,已包装在布局页中
例 : 选择 Privacy 链接后,Pages/Privacy.cshtml
视图在 RenderBody
方法中呈现。
5. ViewData和布局
Pages/Movies/Index.cshtml 标记 :
@page
@model RazorPagesMovie.Pages.Movies.IndexModel
@{
ViewData["Title"] = "Index";
}
{
和 }
字符括住 C# 代码块
PageModel
基类包含 ViewData
字典属性,可用于将数据传递到某个视图
可以使用键值模式将对象添加到 ViewData
字典
6. 更改布局
① Pages/Shared/_Layout.cshtml文件
修改为 <title>@ViewData["Title"] - Movie</title> 显示Title为Movie 替换了 RazorPagesMovie
② Pages/Shared/_Layout.cshtml
文件中的以下定位点元素
<a class="navbar-brand" asp-area="" asp-page="/Index">RazorPagesMovie</a>
替换为
<a class="navbar-brand" asp-page="/Movies/Index">RpMovie</a>
asp-page="/Movies/Index" : 标记帮助程序属性和值可以创建指向 /Movies/Index
Razor 页面的链接
asp-area
属性值为空,因此在链接中未使用区域
③ Pages/_ViewStart.cshtml
文件中设置 Layout
属性
例 :
@{
Layout = "_Layout";
}
7. "创建" 页面模型
Pages/Movies/Create.cshtml.cs
页面模型:
OnGet
方法初始化页面所需的任何状态
Page()
方法创建用于呈现 Create.cshtml
页的 PageResult
对象
Movie
属性使用 [BindProperty] 特性来选择加入模型绑定
OnPostAsync
方法:如果不存在任何模型错误,将重新显示表单,以及发布的任何表单数据。 在发布表单前,可以在客户端捕获到大部分模型错误
如果没有模型错误:
- 将保存数据。
- 浏览器将重定向到 Index 页。
8. "创建Razor"页面
Pages/Movies/Create.cshtml
Razor 页面文件:
<form method="post">
元素是一个表单标记帮助程序。 表单标记帮助程序会自动包含防伪令牌。
基架引擎在模型中为每个字段(ID 除外)创建 Razor 标记。
验证标记帮助程序(<div asp-validation-summary
和 <span asp-validation-for
)显示验证错误。
标签标记帮助程序 (<label asp-for="Movie.Title" class="control-label"></label>
) 生成标签描述和 Title
属性的 [for]
特性。
输入标记帮助程序 (<input asp-for="Movie.Title" class="form-control">
) 使用 DataAnnotations 属性并在客户端生成 jQuery 验证所需的 HTML 属性。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战