学习ASP.NET Core Blazor编程系列十三——路由(完)

除了前面三篇文章中介绍的路由方式,可以用来进行页面跳转之外,今天介绍最后一种方式,如何在代码中进行页面跳转。如果是JavaScript我们会用window.location来切换页面,Blazor为我们提供了相应的封装:NavigationManager。使用NavigationManager可以通过代码直接进行页面间的跳转。我们在BookIndex页面放个按钮然后通过按钮的点击事件进行跳转,修改BookIndex页面的代码,注入NavigationManager对象,通过NavigationManager.NavigateTo方法进行跳转。

学习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%">Name
    Author
    Price
    ReleaseDate

    StockQty

   Qty
    操作
    @foreach (var item in books)
    {
        @item.Name
        @item.Author
        @item.Price
        @item.ReleaseDate
        @item.StockQty
        @item.Qty
         "/AddBook?Id=@item.ID">编辑
                "edit" class="btn btn-primary" @onclick="EditBook(@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事件调用的方法 是错误的。如下图。

  1. 我们希望根据通过事件处理程序传递额外的参数的想法破灭了。幸好Blazor 还支持将 Lambda 表达式作为委托事件处理程序。我们在事件处定义一个小型内联函数,将我们需要传递的信息作为方法的参数与事件参数一起传递给事件处理程序。在下面的示例中,我们在点击鼠标按钮的时候,将图书ID和MouseEventArgs参数,一起传递给EditBook方法。依照下面的代码片段再次修改BookIndex.razor中的Button的点击事件的代码和EditBook方法的代码。代码如下:
"edit" class="btn btn-primary" @onclick="@(e => EditBook(e, @item.ID))">修改public void EditBook(MouseEventArgs e ,int Id)
    {
        NavigationManager.NavigateTo("/AddBook?Id="+Id.ToString());
}
  1. 对于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页面,并将我们需要修改的图书信息显示出来。如下图。

Original: https://www.cnblogs.com/chillsrc/p/16928195.html
Author: DotNet菜园
Title: 学习ASP.NET Core Blazor编程系列十三——路由(完)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/797820/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • python利用BUG让它免费啦~你在不知道就要后悔啦~

    Original: https://www.cnblogs.com/Qqun261823976/p/16505870.htmlAuthor: python倩Title: pytho…

    Python 2023年11月2日
    048
  • 操作异常备忘录(python篇)

    操作异常备忘录-python篇 正则表达式 * 1.正则表达式模板 2.多符号分割–re.split 数据处理常用操作 * 1.替换或删除字符串中指定字符 2.Data…

    Python 2023年8月11日
    041
  • 设置pandas显示行数_Pandas 使用小技巧 No 23

    Pandas 使用小技巧 23:系统配置 如何 print一次只显示指定行数,指定列数。 使用 pd.set_option方法,演示过程如下。 首先创建一个 DataFrame: …

    Python 2023年8月8日
    051
  • Flink的异步算子的原理及使用

    1、简介 Flink的特点是高吞吐低延迟。但是Flink中的某环节的数据处理逻辑需要和外部系统交互,调用耗时不可控会显著降低集群性能。这时候就可能需要使用异步算子让耗时操作不需要等…

    Python 2023年10月19日
    048
  • 基于Python+网络爬虫的兼职招聘就业信息数据可视化分析

    🔥作者:雨晨源码🔥💖简介:java、微信小程序、安卓;定制开发,远程调试 代码讲解,文档指导,ppt制作💖精彩专栏推荐订阅:在下方专栏👇🏻👇🏻👇🏻👇🏻Java精彩实战毕设项目案例小…

    Python 2023年8月2日
    0102
  • pandas入门(5)——汇总和计算描述统计

    pandas对象拥有一组常用的数学和统计方法。它们大部分都属于约简和汇总统计,用于从Series中提取单个值(如sum或mean)或从DataFrame的行或列中提取一个Serie…

    Python 2023年8月21日
    064
  • Flappy Bird游戏创建管道类

    代码如下: -*- coding:utf-8 -*- import pygame import sys import random class Bird(object): def …

    Python 2023年9月25日
    044
  • 宝塔面板部署django出现403、502等等问题

    项目场景: 宝塔面板是非常好用的一个管理面板快速,简洁,免费,通用我的项目使用:宝塔+django+uwsgi+nginx进行部署 问题描述: 二次部署django项目时总是显示4…

    Python 2023年8月5日
    051
  • 【羊了个羊】什么!第二关难如上青天,能不能简单版??

    Original: https://www.cnblogs.com/Qqun261823976/p/16703439.htmlAuthor: python倩Title: 【羊了个羊…

    Python 2023年10月31日
    055
  • Python | 英雄联盟游戏数据分析

    一、项目背景 EDG夺得2021英雄联盟全球总决赛冠军,这场比赛让所有观赛者热血沸腾,也唤起了我这个沉睡多年老玩家对MOBA游戏的兴趣,兴冲冲地下载了英雄联盟,却发现这并不是一个可…

    Python 2023年8月7日
    0109
  • Python库之numpy之数组切片

    众所周知,python中有很多的库,numpy就是其中的一个库,做数据分析必备的库之一,今天就让我们来学一下,numpy的切片 今天上课学这个切片切的我快自卑了,为啥为啥,脑子里全…

    Python 2023年8月29日
    053
  • SimCLR-[论文学习笔记]

    SimCLR是对比学习系列文章里比较容易理解的一个模型框架,这也是Hinton大神的又一篇作品,值得我们仔细阅读与学习。以下就是学习过程中的相关心得笔记,希望能够帮到你,如有错误请…

    Python 2023年10月10日
    059
  • 用YOLOv5ds训练自己的数据集——同时检测和分割

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年9月26日
    039
  • Python 学习日记day 16

    内容:坦克大战1.0.1版本 ”’版本:1.0.1 新增功能: 事件处理: 点击关闭按钮,退出程序 方向控制,发射子弹”’ 昨天的代码只能运行显示窗口,点窗口的x确不能退出,明…

    Python 2023年9月20日
    052
  • python_爬虫 17 Scrapy框架之(三)CrawlSpider

    目录 CrawlSpider CrawlSpider爬虫: 创建CrawlSpider爬虫: LinkExtractors链接提取器: Rule规则类: 微信小程序社区CrawlS…

    Python 2023年10月4日
    045
  • EasyExcel对大数据量表格操作导入导出

    前言 最近有个项目里面中有大量的Excel文档导入导出需求,数据量最多的文档有上百万条数据,之前的导入导出都是用apache的POI,于是这次也决定使用POI,结果导入一个四十多万…

    Python 2023年10月15日
    062
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球