码农知识堂 - 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编程系列三——实体
    学习ASP.NET Core Blazor编程系列四——迁移
    学习ASP.NET Core Blazor编程系列五——列表页面
    学习ASP.NET Core Blazor编程系列七——新增图书
    学习ASP.NET Core Blazor编程系列八——数据校验
    学习ASP.NET Core Blazor编程系列十——路由(上)
    学习ASP.NET Core Blazor编程系列十二——路由(下)
     
     
           除了前面三篇文章中介绍的路由方式,可以用来进行页面跳转之外,今天介绍最后一种方式,如何在代码中进行页面跳转。
     

    九、NavigationManager

            有的时候我们可能需要在代码里进行导航,如果是JavaScript我们会用window.location来切换页面,Blazor为我们提供了相应的封装:NavigationManager。使用NavigationManager可以通过代码直接进行页面间的跳转。我们在BookIndex页面放个按钮然后通过按钮的点击事件进行跳转,修改BookIndex页面的代码,注入NavigationManager对象,通过NavigationManager.NavigateTo方法进行跳转。

    名称

    类型

    说明

    BaseUri

    属性

    获取或设置当前的基 URI。BaseUri 始终表示为字符串形式的绝对 URI,以斜杠结尾。 通常,这与文档中 元素的 href 特性相对应。

    Uri

    属性

    获取或设置当前 URI。 Uri 始终以字符串形式表示为绝对 URI。

    NavigateTo

    方法

    导航到指定 URI。

    ToAbsoluteUri

    方法

    将相对 URI 转换为绝对 URI。

    ToBaseRelativePath

    方法

    给定基 URI (比如,前面的 BaseUri 的返回值),将绝对 URI 转换为相对于基 URI 前缀的 URI。

    LocationChanged

    事件

    当导航位置变化时触发的事件。

     

           1. 在Visual Studio 2022的解决方案资源管理器中,找到 BookIndex.razor 组件,使用鼠标左键双击,在文本编辑器中打开,然后修改代码如下:

    复制代码
    @page "/BookIndex"
    @using BlazorAppDemo.Models
    @using Microsoft.EntityFrameworkCore
    
     
    
    @inject IDbContextFactory dbFactory
    @inject NavigationManager NavigationManager
    
     
    
    图书列表
     
    
    

    图书列表

    class="table-responsive" width="90%">    @foreach (var item in books) {     }
    Name Author Price ReleaseDate StockQty Qty 操作
    @item.Name @item.Author @item.Price @item.ReleaseDate @item.StockQty @item.Qty "/AddBook?Id=@item.ID">编辑
      @code { private static BookContext _context; private List books = new List(); protected override async Task OnInitializedAsync() { _context = dbFactory.CreateDbContext(); books=_context.Book.ToList(); await base.OnInitializedAsync(); } public void EditBook(int Id) { NavigationManager.NavigateTo("/AddBook?Id="+Id.ToString()); } }
    复制代码

          上面代码中,我们添加了Button按钮和EditBook方法,在EditBook方法 中我们通过NavigationManager.NavigateTo("/AddBook?Id="+Id.ToString());

          这一行代码是通过把Id参数放在URL的QueryString中,将图书的ID传递给AddBook页面。

        2.在我们写完上面的代码之后,Visual Studio 2022提示我们使用的Button的@onclick事件调用的方法 是错误的。如下图。

     

         3. 我们希望根据通过事件处理程序传递额外的参数的想法破灭了。幸好Blazor 还支持将 Lambda 表达式作为委托事件处理程序。我们在事件处定义一个小型内联函数,将我们需要传递的信息作为方法的参数与事件参数一起传递给事件处理程序。在下面的示例中,我们在点击鼠标按钮的时候,将图书ID和MouseEventArgs参数,一起传递给EditBook方法。依照下面的代码片段再次修改BookIndex.razor中的Button的点击事件的代码和EditBook方法的代码。代码如下:

    复制代码
    
    
              
    
    public void EditBook(MouseEventArgs e ,int Id)
        {
            NavigationManager.NavigateTo("/AddBook?Id="+Id.ToString());
    }
    复制代码
         4. 对于AddBook.razor 文件中的代码,我们不需要进行任何修改,还是使用上一篇文章中的代码。

        5.在Visual Studio 2022的菜单栏上,找到“调试à开始调试”或是按F5键,Visual Studio 2022会生成BlazorAppDemo应用程序,并在浏览器中打开Home页面,我们我们使用鼠标左键点击左边菜单上的“图书列表”菜单项,浏览器会显示我们修改过的图书列表页面,浏览器中我们看到在“编辑”按钮的下方,多了一个“修改”按钮。如下图。

         6.在浏览器中,使用鼠标左键点击我们要修改的图书信息的“修改”按钮,浏览器会自动跳转到AddBook页面。我们在AddBook的OnParametersSet方法 中设置断点,我们看到QueryString是取到了,我们看通过QueryHelpers.ParseQuery方法将QueryString格式化成字典形式,通过键值ID,我们取到了我们想到的参数值。如下图。

        7.在Visual Studio 2022中按F5,让代码继续执行。回到浏览器中,页面已经自动跳转到AddBook页面,并将我们需要修改的图书信息显示出来。如下图。

     

     

     

     

  • 相关阅读:
    9:00面试,9:08就出来了,问的实在有点变态
    Mysql创建用户及授权
    Material Design 风格的 UI 框架 Vuetify 使用初体验
    懒人福利:只需一行代码,导入所有的 Python 库
    成型vue3项目引入electron通信
    Vue中使用js-audio-recorder插件实现录音功能并实现上传Blob数据到SpringBoot后台接口
    8.云原生-Kubesphere3.3.0使用DevOps部署RuoYi 微服务版(下篇)
    [Swift学习] 访问控制 Access Control, private、public、filePrivate等修饰符
    通信原理学习笔记4:信道编码、分组码、卷积码、现代信道编码(Turbo码、LDPC码、Polar码)
    Win10下python的命令行启动和调用问题
  • 原文地址:https://www.cnblogs.com/chillsrc/p/16928195.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号