码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 学习ASP.NET Core Blazor编程系列十——路由(上)


    学习ASP.NET Core Blazor编程系列一——综述
    学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(上)
    学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(中)

    学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(下) 

    学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(完)
    学习ASP.NET Core Blazor编程系列三——实体
    学习ASP.NET Core Blazor编程系列四——迁移
    学习ASP.NET Core Blazor编程系列五——列表页面
    学习ASP.NET Core Blazor编程系列六——初始化数据
    学习ASP.NET Core Blazor编程系列七——新增图书
    学习ASP.NET Core Blazor编程系列八——数据校验
    学习ASP.NET Core Blazor编程系列九——服务器端校验

     

       一、ASP.NET Core Blazor之 路由

          Web应用程序的可以通过URL将多个页面串联起来,达成一个组件功能,并且可以互相跳转。我们开发系统的时候总是需要使用路由来实现页面之间的跳转。ASP.NET Core MVC或是ASP.NET WebForm主要是使用a标签或者是服务端redirect来跳转。例如在ASP.NET Core MVC中我们使用如下代码进行跳转:

         <a asp-page="./Edit" asp-route-id="@item.ID">Edita>

          那么Blazor是如何进行页面之间跳转的呢?接下来我们来学习页面之间的跳转。

         二、 使用@page指定组件的路由路径进行跳转

          我们在创建Blazor应用程序时,微软已经给我们内置了一个默认的路由,这个是由Blazor的路由组件(Router)实现的。

    通过 Router 组件可在 Blazor 应用中路由到 Razor 组件。 Router 组件在 Blazor 应用的 App 组件中使用。在Visual Studio 2022的解决方案管理器中找到App.razor,双击打开,你可以看到如下代码:

    复制代码
    <Router AppAssembly="@typeof(App).Assembly">
        <Found Context="routeData">
            <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
            <FocusOnNavigate RouteData="@routeData" Selector="h1" />
        Found>
        <NotFound>
            <PageTitle>Not foundPageTitle>
            <LayoutView Layout="@typeof(MainLayout)">
                <p role="alert">Sorry, there's nothing at this address.p>
            LayoutView>
        NotFound>
    Router>
    复制代码

            我们在创建Blazor组件的时候,须在组件的第一行写上@page 开头的代码, @page “url路径” 来表示路由地址,比如/ BookIndex,那么该页面的请求地址就是域名:端口号/ BookIndex。代码示例如下:

    @page "/BookIndex"

           Visual Studio 2022编译器在编译带有 @page 指令的 Razor 组件 (.razor) 时,将为组件类提供一个 RouteAttribute 来指定组件的路由。

           当应用程序启动时,应用程序将扫描由Router组件中AppAssembly属性指定的程序集,收集程序集中具有 RouteAttribute 的Blazor组件的路由信息。

          在应用程序运行时,RouteView 组件:

    • 从 Router 接收 RouteData 以及所有路由参数。
    • 使用指定的组件的布局来呈现该组件,包括任何后续嵌套布局。

          对于没有使用 @layout 指令指定布局的组件,可使用RouteView中DefaultLayout 参数来指定一个默认的布局,NET 6框架中的 Blazor项目模板默认指定 MainLayout 组件 (Shared/MainLayout.razor) 作为应用的默认布局。    

      <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
     

          访问/BookIndex 看到BookIndex 页面被渲染出来了。如下图。

           Router 不与查询字符串值交互。

         三、在找不到内容时提供自定义内容

            在Blazor里给每个组件指定一个路径(URL),当路由匹配的时候,会在节点里面渲染出来,如果没有的话会在节点里面渲染,当然你也可以自定义一个404的页面。在Visual Studio 2022的解决方案资源管理器中,找到 App.razor 组件,使用鼠标左键双击,在文本编辑器中打开,找到Router组件的 NotFound 模板,NotFound 模板中设置自定义内容。例如如下示例代码:  

    复制代码
    <Router AppAssembly="@typeof(App).Assembly">
        <Found Context="routeData">
            <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
            <FocusOnNavigate RouteData="@routeData" Selector="h1" />
    
        Found>
        <NotFound>
            <PageTitle>Not foundPageTitle>
            <LayoutView Layout="@typeof(MainLayout)">
                <h1>页面走失!请确认输入的URL是否正确!h1>
    
                <p role="alert">Sorry, there's nothing at this address.p>
    
            LayoutView>
        NotFound>
    Router>
    复制代码

            任意项都可用作 标记的内容,例如其他交互式组件。

           在Visual Studio 2022的菜单栏上,找到“调试-->开始调试”或是按F5键,Visual Studio 2022会生成BlazorAppDemo应用程序,并在浏览器中打开Home页面,我们浏览器的地址栏中输https://localhost:7110/BookEdit。由于我们的应用程序中没有BookEdit这个组件或是页面,我们将会看到我们刚才定义的404页面,这个页面被渲染出来了。如下图。

        注意:如果是在浏览器里敲入url按回车切换页面,会发生一次http请求,然后重新渲染blazor应用。

         四、使用a标签进行页面跳转

             标签作为超链接是我们在进行Web应用程序开发中最常用的一种页面跳转方式,blazor同样支持。
             在Visual Studio 2022的解决方案资源管理器中,找到 BookIndex.razor 组件,使用鼠标左键双击,在文本编辑器中打开,然后修改代码如下:

    复制代码
    @page "/BookIndex"
    @using BlazorAppDemo.Models
    @using Microsoft.EntityFrameworkCore
     
    
    @inject IDbContextFactory<BookContext> dbFactory
     
    <PageTitle>图书列表PageTitle>
    
    <h3>图书列表h3>
    <table class="table-responsive" width="90%"> 
        <tr><td>Nametd>
        <td>Authortd>
        <td>Pricetd>
        <td>ReleaseDatetd>
        <td>StockQtytd>
        <td>Qtytd>
        <td>操作td>
    
    
        tr>
        @foreach (var item in books)
        {
            <tr> 
            <td>@item.Nametd>
            <td>@item.Authortd>
            <td>@item.Pricetd>
            <td>@item.ReleaseDatetd>
            <td>@item.StockQtytd>
            <td>@item.Qtytd>
                <td><a href="/AddBook">编辑a>td>
       tr>
     
        }
    table>
    
    @code {
        private   static BookContext _context;
        private List<Book> books = new List<Book>();
       protected override async Task OnInitializedAsync()
        {
            _context = dbFactory.CreateDbContext();
            books=_context.Book.ToList();
            await base.OnInitializedAsync();
    
        }
    
    }
    复制代码

           在Visual Studio 2022的菜单栏上,找到“调试-->开始调试”或是按F5键,Visual Studio 2022会生成BlazorAppDemo应用程序,并在浏览器中打开Home页面,我们我们使用鼠标左键点击左边菜单上的“图书列表”菜单项,浏览器会显示我们修改过的图书列表页面,在这个页面中多了一个“编辑”的按钮,将鼠标指针悬停在“编辑”链接上可以查看,链接背后的URL值。如下图。

          使用鼠标左键,点击“编辑”,页面将会从图书列表页面中跳转到AddBook页面,但是没有任何我们想要的数据,这个问题留到下一步给出解决方案。如下图。

            注意:使用标签在页面之间进行跳转不会发生http请求传输到后台,经过服务器处理之后,再传输到前面进行渲染,而是直接在前端将页面渲染出来。

  • 相关阅读:
    【JavaWeb】你这么厉害,知道RBAC权限模型和ABAC权限模型吗?
    【前端】webpack打包去除console.log
    平台工程:构建企业数字化转型的基石
    第五届“强网”拟态防御国际精英挑战赛——线上预选赛火热开赛!
    【愚公系列】2022年11月 .NET CORE工具案例-.NET Core执行JavaScript
    # Apifox前后端开发人员使用场景
    SpringBoot 4 SpringBoot 整合 Mybatis
    swagger下载文件名中文乱码、swagger导出文件名乱码、swagger文件导出名称乱码、解决swagger中文下载乱码bug
    项目启动端口被占用 -- Web server failed to start. Port 8082 was already in use.
    从零开始:Rust环境搭建指南
  • 原文地址:https://www.cnblogs.com/chillsrc/p/16862431.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号