上一篇 添加基架 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.csOnPostAsync 方法

        public async Task<IActionResult> OnPostAsync()

             {

        if (!ModelState.IsValid) { return Page(); }

        _context.Movie.Add(Movie);

     await _context.SaveChangesAsync();

       return RedirectToPage("./Index");

    }

    检查 Pages/Movies/Index.cshtmlRazor 页面:

        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/IndexRazor 页面的链接

        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.cshtmlRazor 页面文件:

      <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 属性。

posted @   大师兄被妖怪抓走了  阅读(143)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示