學習ASP.NET Core Blazor編程系列十——路由(上)

来源:https://www.cnblogs.com/chillsrc/archive/2022/11/06/16862431.html
-Advertisement-
Play Games

nuget打包靜態資源的問題 前段時間做了個區劃包, 爬了點數據生成了一個 region-tree.json 文件, 存放了全國一直到街道級的區劃數據 然後又寫了點代碼解析處理這個文件 當時的 csproj 中對這個資源是這樣引用的 <ItemGroup> <None Include="region ...


學習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">Edit</a>

      那麼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 found</PageTitle>
        <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 指令指定佈局的組件,可使用RouteViewDefaultLayout 參數來指定一個預設的佈局,NET 6框架中的 Blazor項目模板預設指定 MainLayout 組件 (Shared/MainLayout.razor) 作為應用的預設佈局。    

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

      訪問/BookIndex 看到BookIndex 頁面被渲染出來了。如下圖。

       Router 不與查詢字元串值交互。

     三、在找不到內容時提供自定義內容

        在Blazor里給每個組件指定一個路徑(URL),當路由匹配的時候,會在<Found></Found>節點裡面渲染出來,如果沒有的話會在<NotFound></NotFound>節點裡面渲染,當然你也可以自定義一個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 found</PageTitle>
        <LayoutView Layout="@typeof(MainLayout)">
            <h1>頁面走失!請確認輸入的URL是否正確!</h1>

            <p role="alert">Sorry, there's nothing at this address.</p>

        </LayoutView>
    </NotFound>
</Router>

        任意項都可用作 <NotFound> 標記的內容,例如其他互動式組件。

       在Visual Studio 2022的菜單欄上,找到“調試-->開始調試”或是按F5鍵,Visual Studio 2022會生成BlazorAppDemo應用程式,併在瀏覽器中打開Home頁面,我們瀏覽器的地址欄中輸https://localhost:7110/BookEdit。由於我們的應用程式中沒有BookEdit這個組件或是頁面,我們將會看到我們剛纔定義的404頁面,這個頁面被渲染出來了。如下圖。

    註意:如果是在瀏覽器里敲入url按回車切換頁面,會發生一次http請求,然後重新渲染blazor應用。

     四、使用a標簽進行頁面跳轉

         <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>Name</td>
    <td>Author</td>
    <td>Price</td>
    <td>ReleaseDate</td>
    <td>StockQty</td>
    <td>Qty</td>
    <td>操作</td>


    </tr>
    @foreach (var item in books)
    {
        <tr> 
        <td>@item.Name</td>
        <td>@item.Author</td>
        <td>@item.Price</td>
        <td>@item.ReleaseDate</td>
        <td>@item.StockQty</td>
        <td>@item.Qty</td>
            <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頁面,但是沒有任何我們想要的數據,這個問題留到下一步給出解決方案。如下圖。

        註意:使用標簽<a>在頁面之間進行跳轉不會發生http請求傳輸到後臺,經過伺服器處理之後,再傳輸到前面進行渲染,而是直接在前端將頁面渲染出來。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ==Servlet01== 官方api文檔:https://tomcat.apache.org/tomcat-8.0-doc/servletapi/index.html Servlet和Tomcat的關係:一句話,Tomcat支持Servlet Servlet是跟Tomcat關聯在一起的,換而言之, ...
  • 文件 1.File對象 java封裝的一個操作文件及文件夾(目錄)的對象。可以操作磁碟上的任何一個文件和文件夾。 2.創建文件 方式一:根據路徑構建一個File對象new File(path) //方式一 @Test public void create01(){ try { String path ...
  • 目錄 一. EGL 前言 二. EGL 繪製流程簡介 三.eglCreatePbufferSurface 函數簡介 1.eglCreatePbufferSurface 簡介 2.eglCreatePbufferSurface 和 eglCreateWindowSurface 區別 四.eglCrea ...
  • Switch語法 switch作為Java內置關鍵字,卻在項目中真正使用的比較少。關於switch,還是有那麼一些奧秘的。 要什麼switch,我有if-else 確實,項目中使用switch比較少的一個主要原因就在於它的作用能被if-else代替,況且switch對類型的限制,也阻礙了switch ...
  • 作為一個實用主義的學習者,最關心的問題一定是 “我為什麼要選擇學Python,學會之後我可以用來做什麼?”。 在上篇《為什麼選擇Python入門》文章中,我們已經明白了為什麼選擇學習Python,本文就帶你瞭解學完Python之後可以用來做什麼。Python之所以能火爆全網,得益於Python廣泛的 ...
  • 變數 變數的使用步驟:聲明、賦值、使用 package main import "fmt" func main(){ // 1.變數的聲明 var age int // 2.變數的賦值 age = 18 // 3.變數的使用 fmt.Println("age = ",age) // 4.變數的聲明和 ...
  • 題目:質數之和 已知,第一個質數是2,第二個質數是3,第三個質數是5,第四個質數是7,第五個質數是11,第六個質數是13,第七個質數是17,輸入兩個不相等的正整數a和b,求出第a個質數到第b個質數當中所有質數和。a和b之間以空格間隔,其中a和b都小於200。 輸入1:1 4 輸出1:17 輸入2:7 ...
  • 知道的朋友瞭解 我不是屬於講按部就班技術的那種人。什麼xx入門 ,入門到精通,入門到入土。 其實非要嚴格說的話已經跟angularjs 什麼ajax 偏的有點遠了,之所以還是叫這個名稱,因為都屬於web應用 ,叫這個名稱是一種延續,其實這個系列持續了幾年了 是我自己從學習到一種適合我自己環境的特有應 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...