Blazor University (24)路由 —— 可选路由参数

原文链接:https://blazor-university.com/routing/optional-route-parameters/

可选路由参数

Blazor 不明确支持可选路由参数,但可以通过在组件上添加多个 @page 声明轻松实现等效。例如,更改标准 Counter.razor 页面以添加额外的 URL。

@page "/counter"
@page "/counter/{CurrentCount:int}"

int currentCount 字段更改为参数,如下所示

[Parameter] public int CurrentCount { get; set; }

然后用 CurrentCount 替换所有对 currentCount 的引用。还在页面上添加一些导航,以便我们可以快速测试我们的路由

@page "/counter"
@page "/counter/{CurrentCount:int}"<h1>Counter</h1><p>Current count: @CurrentCount</p><button class="btn btn-primary" @onclick=IncrementCount>Click me</button><ul><li><a href="/counter/42">Navigate to /counter/42</a></li><li><a href="/counter/123">Navigate to /counter/123</a></li><li><a href="/counter/">Navigate to /counter</a></li>
</ul>@code {[Parameter]public int CurrentCount { get; set; }void IncrementCount(){CurrentCount++;}
}

当我们运行这个应用程序时,我们看到我们可以导航到 /counter(不需要参数)或 /counter/AnyNumber(指定参数值)。当 URL 中没有指定值时,将使用属性类型的默认值。

为可选参数指定默认值

如果我们希望参数的默认值不是 C# 默认值怎么办?例如,当没有指定 CurrentCount 的值时,我们可能希望它默认为 1 而不是 0

首先,我们需要将参数属性的类型更改为可空,这样我们就可以区分 /counter/0 和只是 /counter 之间的区别——如果它为空,则将默认值分配给该属性。

[Parameter]
public int? CurrentCount { get; set; }protected override void OnInitialized()
{base.OnInitialized();CurrentCount = CurrentCount ?? 1;
}

起初这似乎可行,导航到 /counter 实际上会将我们的 CurrentCount 值默认为 1

baba387562a05a7dc1e49d3bf475ad69.png

但是,这仅在页面第一次显示时有效。如果我们现在使用其中一个链接导航到 /counter 而不先导航到另一个页面(例如 Home),我们将看到 CurrentCount 默认为 null

e0120d704e5d1f224f5ad13069f2e72d.gif

源代码[1]

当组件是 @page 并且我们的 Blazor 应用导航到呈现相同页面的新 URL 时,Blazor 不会创建组件的新实例来呈现页面,而是将其视为具有更改参数的相同页面.因为这个 OnInitialized 只会在第一次创建页面时执行。有关详细信息,请参阅组件生命周期[2]

上一个 URL当前 URL是否执行 Counter.OnInit
//counter是 – 不同的页面
/counter/counter/42否 - 同一页面
/counter/42counter/123否 – 同一页面
/counter/是 - 不同的页面

正确的解决方案是在 SetParametersAsync 中设置默认值——只要参数发生变化并且它们的值被推送到组件的属性中,例如在导航期间,就会调用该值。

[Parameter]
public int? CurrentCount { get; set; }public async override Task SetParametersAsync(ParameterView parameters)
{await base.SetParametersAsync(parameters);CurrentCount = CurrentCount ?? 1;
}

185a3993d2701802dada380291d55ca8.gif

404 – Not found

当 Blazor 无法将 URL 与组件匹配时,我们可能想告诉它要显示什么内容。

Router 组件有一个名为 NotFound 的 RenderFragment 参数[3],它是一个 RenderFragment[4]。当尝试访问无法与任何组件匹配的 URL 时,将显示在 Router 组件的此参数中定义的任何 Razor 标记。

<Router AppAssembly="typeof(Program).Assembly"><Found Context="routeData"><RouteView RouteData="routeData" /></Found><NotFound><div class="content"><h1>PAGE NOT FOUND</h1><p>The page you have requested could not be found. <a href="/">Return to the home page.</a></p></div></NotFound>
</Router>

ada8c87a421625589226828d911d19ff.png

参考资料

[1]

源代码: https://github.com/mrpmorris/blazor-university/tree/master/src/Routing/OptionalRouteParameters

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于tomcat和sessionCookieName和SESSION_PARAMETER_NAME以及disableURLRewriting参数原理和使用...

关于tomcat和sessionCookieName和SESSION_PARAMETER_NAME以及disableURLRewriting参数 关于session和cookie参考&#xff1a; http://www.blogjava.net/freeman1984/archive/2011/09/02/357833.html http://www.blogjava.net/freeman1984/archive/2010/09/09/331501.html http:…

我让代码生了个孩子继承了他爸爸谁知他爸爸继承了他爷爷(16)

本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新&#xff0c;包括别的语言以及实战都将使用对话的方式进行教学&#xff0c;基础编程语言教学适用于零基础小白&#xff0c;之后实战课程也将会逐步更新。 若…

linux之lrzsz

1、lrzsz介绍 我们利用lrzsz进行windows和linux间的文件上传下载 2、安装 在ubuntu系统下 sudo apt-get install lrzsz 在centos系统下 yum install lrzsz 3、使用 1)、windows上传文件到linux环境,使用如下命令 rz

Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(2)...

函数load也是实现在文件hardware/libhardware/hardware.c文件中&#xff0c;如下所示&#xff1a; static int load(const char *id, const char *path, const struct hw_module_t **pHmi) { int status; void *handle; struct hw_module_t …

VS2019社区版(Community)试用30天过期的有效解决办法

VS2019社区版是免费的&#xff0c;前提是你得登陆自己的账户&#xff0c;如果一开始安装时没有登陆&#xff0c;那么就会只有30天有效期。此时&#xff0c;需要我们登陆微软账号&#xff0c;重新验证即可。 登陆微软账号&#xff0c;即可继续免费试用。

【万字长文】使用 LSM Tree 思想实现一个 KV 数据库

目录设计思路内存表WALSSTable 的结构SSTable 元素和索引的结构SSTable Tree内存中的 SSTable数据查找过程何为 LSM-Treee参考资料整体结构实现过程文件压缩测试插入测试加载测试查找测试SSTable 结构SSTable 文件结构SSTable Tree 结构和管理 SSTable 文件读取 SSTable 文件SS…

记录部件中GetFieldControlByFieldName(字段值样式设置)用法

度量快速开发平台中&#xff0c;记录部件上&#xff0c;不单是字段名称可以设置样式&#xff0c;要填入内容的方框也可以设置样式。通过获取记录部件上某一个字段的输入控件&#xff0c;在二次开发中不常用。该方法只有一个参数&#xff0c;即要获取对象的字段&#xff0c;需要…

C/C++/Linux工程师学习资料干货路线这都有,从入门到实战!【CSDN宝藏资料图鉴第二期】

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 前言 CSDN 是全球知名的开发者社区&#xff0c;创建于1999年&#xff…

你要的来了:ArcGIS空间插值分析方法权威解读

插值问题的提出??? 一、趋势面 Trend is a global polynomial interpolation that fits a smooth surface defined by a mathematical function (a

Socket解决粘包问题2

在AsynServer中对接收函数增加接收判断&#xff0c;如果收到客户端发送的请求信息&#xff0c;则发送10个测试包给发送端&#xff0c;否则继续接收&#xff0c;修改后的接收代码如下&#xff1a; private void AsynReceive(){byte[] data new byte[1024];//接收缓存string rec…

保姆级的HTML零基础教程少见吧?这是第一节(1)

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。 目录 HTML基…

WPF 通用权限开发框架 (ABP)

前言对于大部分.NET 开发者来说, 都比较熟悉目前流行的ABP框架, 基于开源的ABP框架, 可以自己进行二次开发, 无需重新开发一些基础功能,例如: 用户角色管理、权限、组织、多租户等等。但是对于ABP框架来说, 提供给.NET开发者的可选项非常少, 目前也仅仅是提供了基于Web的解决方…

MongoDB 3.0 新增特性一览

引言 在历经版本号修改&#xff08;2.8版本直接跳到3.0版本&#xff09;和11个rc版本之后&#xff0c;MongoDB3.0于2015年3月3日正式发布。可以毫不夸张的说&#xff0c;该版本的新增特性标志着MongoDB这款典型的NoSQL数据库已经进入了一个全新的发展阶段。本文以下内容会逐个盘…

淘宝网的技术发展史(一)——个人网站时代

《天下网商经理人》十月刊开始将连载系列文章《淘宝网的技术发展史》&#xff0c;为读者描述淘宝网在整个发展过程中&#xff0c;所有的主动和被动的技术变革的前因后果。 文/淘宝技术大学培训专家 子柳 前言 11月11日&#xff0c;这个棍子最多的日子被网民自我调侃变成了一个…

使用 Vscode 编写 HTML 文档竟然可以自动写代码(2)

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。 目录 HTML基…

为什么 Docker 和 Kubernetes 是用 Go 写的而不是 C# ?

这是 Reddit 平台上面这几天一篇比较热门的帖子, 非常有意思&#xff0c;本文我列出了几个高赞的回答。&#x1f466; HahahahahaSoFunny为什么 Docker 和 Kubernetes 工具是用 Go 写的而不是 C#&#xff1f;总所周知&#xff0c;现在开发人员使用的很多新工具大多是用 Go 写的…

打造最舒适的webview调试环境

你在做移动web开发的时候是不是只是在Chrome下开启移动模式&#xff0c;然后就啪啪啪闷头敲代码了&#xff1f;如果你平时只是做做宣传页&#xff0c;Chrome的移动模式可能就能满足你。但是现在越来越多的应用采用Hybrid的开发方式&#xff0c;这样的话就可能在web页面上调用we…

淘宝网的技术发展史(二) ——Oracle替换MySQL

本文是《淘宝网的技术发展史》系列连载文的第二篇&#xff0c;在告别个人网站时代后&#xff0c;淘宝网的技术发展迎来了由Oracle开启的第二个时代。文/淘宝技术大学培训专家 子柳MySQL撑不住了 淘宝网作为个人网站发展的时间其实并不长&#xff0c;由于它太引人注目了&#xf…

Android之抓取adb logcat全日志后怎么过滤掉只包含当前app进程的日志(一般抓启动app奔溃日志)

1 、问题 有时候我们启动APP的时候&#xff0c;APP奔溃&#xff0c;在android studio里面日志可能冲掉&#xff0c;或者是云平台的手机安装的app&#xff0c;根本就没有android stduio&#xff0c;那我们用什么办法快速知道启动奔溃日志呢&#xff1f; 2、解决办法 我们先需要…

一个基础的 HTML 文档有哪些标签?(3)

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。 目录 HTML基…