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.pswp.cn/news/286911.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286911.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286911.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【無人機組裝與調試】第六章 電調、電池、電機

【無人機組裝與調試】系列課程全集: 第一章 概述 第二章 關于新西達30A電調說明書的問題 第三章 舵機安裝與調整 第四章 F450四軸裝機實例-選擇機型、需要的器材工具材料 第五章 無人機遙控器 第六章 電調、電池、電機 一、電調 6.1.1 電調的概念 電調,全稱電子調速器,英…

關于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

POJ 1611 The Suspects (并查集)

The Suspects題目鏈接&#xff1a; http://acm.hust.edu.cn/vjudge/contest/123393#problem/B Description 嚴重急性呼吸系統綜合癥( SARS), 一種原因不明的非典型性肺炎,從2003年3月中旬開始被認為是全球威脅。為了減少傳播給別人的機會, 最好的策略是隔離可能的患者。 在Not-…

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 …

Win8消費者預覽版下載地址 包含中文下載地址及中文手冊

Win8消費者預覽版下載地址&#xff08;32位英文版&#xff09;&#xff1a; http://ak.or.esd.microsoft.com/pr/WCPDL/8A9D4FDFF736C5B1DBF956B89D6C8FDFD925DACD2/Windows8-ConsumerPreview-32bit-English-x1794225.esd Win8消費者預覽版下載地址&#xff08;64位英文版&…

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…

linux之安裝mysql提示Error: Unable to find a match: mysql-community-server

1 問題 在centos系統下安裝mysql,命令如下 yum -y install mysql-community-server 提示錯誤如下 [root@iZm5e6dk6exl71zbx327zvZ mysql]# yum -y install mysql-community-server MySQL Connectors Community …

記錄部件中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…

C# WebBrowser 取 window.open 新窗口 url的方法

System.Windows.Forms.WebBrowser wb; //WebBrowser 對象wb.NewWindow new CancelEventHandler(wb_NewWindow);wb.DocumentCompleted delegate{ #region 處理window.open新開窗口的問題System.Windows.Forms.HtmlElement html wb.Document.CreateElemen…

linux之rpm

1、rpm Linux rpm 命令用于管理套件 -a  查詢所有套件。-b<完成階段><套件檔>+或-t <完成階段><套件檔>+  設置包裝套件的完成階段,并指定套件檔的文件名稱。-c  只列出組態配置文件,本參數需配合"-l"參數使用。-d  只列出文本文件,…

保姆級的HTML零基礎教程少見吧?這是第一節(1)

作者簡介 作者名&#xff1a;1_bit 簡介&#xff1a;CSDN博客專家&#xff0c;2020年博客之星TOP5&#xff0c;藍橋簽約作者。15-16年曾在網上直播&#xff0c;帶領一批程序小白走上程序員之路。歡迎各位小白加我咨詢我相關信息&#xff0c;迷茫的你會找到答案。 目錄 HTML基…

WPF 通用權限開發框架 (ABP)

前言對于大部分.NET 開發者來說, 都比較熟悉目前流行的ABP框架, 基于開源的ABP框架, 可以自己進行二次開發, 無需重新開發一些基礎功能,例如: 用戶角色管理、權限、組織、多租戶等等。但是對于ABP框架來說, 提供給.NET開發者的可選項非常少, 目前也僅僅是提供了基于Web的解決方…

甘肅省事業單位公考招聘考試權威復習資料---GIS專業綜合復習題(一)

1. 數字城市 以計算機技術、多媒體技術和大規模存儲技術為基礎,以寬帶網絡為紐帶,運用遙感、全球定位系統、地理信息系統、遙測、仿真-虛擬等技術,對城市進行多分辨率、多尺度、多時空和多種類的三維描述,即利用信息技術手段把城市的過去、現狀和未來的全部內容在網絡上進…

MongoDB 3.0 新增特性一覽

引言 在歷經版本號修改&#xff08;2.8版本直接跳到3.0版本&#xff09;和11個rc版本之后&#xff0c;MongoDB3.0于2015年3月3日正式發布。可以毫不夸張的說&#xff0c;該版本的新增特性標志著MongoDB這款典型的NoSQL數據庫已經進入了一個全新的發展階段。本文以下內容會逐個盤…