<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ASP.NET Core Blazor 路由配置和導航

       大家好,我是碼農剛子。本文系統介紹了Blazor單頁應用的路由機制。主要內容包括:1)基礎路由配置,通過@page指令定義URL映射;2)路由參數處理,支持參數約束、可選參數和通配符捕獲;3)編程式導航實現,利用NavigationManager進行頁面跳轉和參數傳遞;4)高級功能如路由事件監聽和嵌套路由布局。文章通過代碼示例演示了用戶管理、產品展示等典型場景的實現方式,完整呈現了Blazor路由從基礎配置到復雜應用的全套解決方案。

      1、什么是 Blazor 路由?

      Blazor 路由是一個將 URL 映射到特定組件的系統,允許構建單頁應用(SPA)而無需頁面刷新。

      核心組件

      • Router 組件:管理路由匹配和導航
      • Route 屬性:定義組件與URL的映射關系
      • NavigationManager:提供編程式導航能力

      2、基礎路由配置

      1. 應用級路由設置

      一般在app.razor文件可以看到路由視圖的定義,這個稱之為路由模板,當找到相匹配的視圖時,會在<Found></Found>節點里面渲染出來,如果沒有的話會在<NotFound></NotFound>節點里面渲染,當然你也可以自定義一個404的頁面。里面的DefaultLayout表示默認布局組件,Layout表示指定的布局組件,這些在前面的布局里面講到過。

      image

      2. 頁面路由定義

      Blazor中使用 @page “url路徑” 來表示路由地址,比如/home,那么該頁面的請求地址就是域名:端口號/home;

      一個組件也可以設置多個路由訪問。

      <!-- Pages/Index.razor -->
      @page "/"
      @page "/home"
      
      <h1>歡迎來到首頁</h1>
      <p>當前時間: @DateTime.Now</p>
      
      @code {
          protected override void OnInitialized()
          {
              Console.WriteLine("首頁初始化完成");
          }
      }

       

      image

      3、路由參數

      1. 基本路由參數

      設置路由參數只需要兩步就可以設置路由參數

      1,@page 后面的url中使用{路由參數名}的占位符格式標明

      2,在@code里面申名一個帶有[Parameter]特性的屬性,這里是不分大小寫的,userName也可以獲取到

      <!-- Pages/UserProfile.razor -->
      @page "/user/{UserName}"
      
      <h1>用戶資料</h1>
      <p>用戶ID: @UserName</p>
      
      @code {
          [Parameter]
          public string UserName { get; set; }
      
          protected override void OnParametersSet()
          {
              // 參數變化時執行
              Console.WriteLine($"加載用戶 {UserName} 的資料");
          }
      }

      http://localhost:端口/user/碼農剛子

      image (2)

      2. 路由約束

      {路有參數名:參數類型} 表示路由約束,可以限定參數的類型,當參數類型不匹配時,就會跳到錯誤頁面

      <!-- Pages/Product.razor -->
      @page "/product/{Id:int}"
      
      <h1>產品頁面</h1>
      
      
      @if (Id > 0)
      {
          <p>產品ID: @Id</p>
      }
      
      @code {
      
          [Parameter]
          public int Id { get; set; }
      }

      http://localhost:端口/product/100

      image (3)

      http://localhost:端口/product/100b

      image (1)

      約束可用參數類型表:

      約束

      示例

      匹配項示例

      固定條件
      區域性
      匹配

      bool

      {active:bool}

      trueFALSE

      datetime

      {dob:datetime}

      2016-12-312016-12-31 7:32pm

      decimal

      {price:decimal}

      49.99-1,000.01

      double

      {weight:double}

      1.234-1,001.01e8

      float

      {weight:float}

      1.234-1,001.01e8

      guid

      {id:guid}

      00001111-aaaa-2222-bbbb-3333cccc4444{00001111-aaaa-2222-bbbb-3333cccc4444}

      int

      {id:int}

      123456789-123456789

      long

      {ticks:long}

      123456789-123456789

      nonfile

      {parameter:nonfile}

      不是 BlazorSample.styles.css

      ,不是 favicon.ico

      3. 可選參數

      <!-- Pages/Product.razor -->
      @page "/product/{Id:int}"
      @page "/product/{Category}/{Id:int}"
      
      <h1>產品頁面</h1>
      
      @if (string.IsNullOrEmpty(Category))
      {
          <p>所有產品</p>
      }
      else
      {
          <p>分類: @Category</p>
      }
      
      @if (Id > 0)
      {
          <p>產品ID: @Id</p>
      }
      
      @code {
          [Parameter]
          public string? Category { get; set; }
      
          [Parameter]
          public int Id { get; set; }
      }

      4. 捕獲所有路由

      <!-- Pages/CatchAll.razor -->
      @page "/docs/{*path}"
      
      <h1>文檔查看器</h1>
      <p>請求的路徑: @Path</p>
      
      @code {
          [Parameter]
          public string? Path { get; set; }
      }

      4、編程式導航

      1. 使用 NavigationManager

      <!-- Pages/NavigationDemo.razor -->
      @page "/navigation"
      @inject NavigationManager Navigation
      
      <h1>導航演示</h1>
      
      <button @onclick="GoToHome" class="btn btn-primary">返回首頁</button>
      <button @onclick="GoToUserProfile" class="btn btn-secondary">查看用戶資料</button>
      <button @onclick="GoBack" class="btn btn-outline">返回上一頁</button>
      <button @onclick="OpenExternal" class="btn btn-info">打開外部鏈接</button>
      
      @code {
          private void GoToHome()
          {
              Navigation.NavigateTo("/");
          }
      
          private void GoToUserProfile()
          {
              Navigation.NavigateTo("/user/123");
          }
      
          private void GoBack()
          {
              Navigation.NavigateTo("/previous-page");
          }
      
          private void OpenExternal()
          {
              Navigation.NavigateTo("https://www.hwtx.top", forceLoad: true);
          }
      }

      image (5)

      2. 帶查詢參數的導航

      <!-- Pages/Search.razor -->
      @page "/search"
      @inject NavigationManager Navigation
      
      <h1>搜索頁面</h1>
      
      <input @bind="searchTerm" placeholder="輸入搜索關鍵詞" />
      <button @onclick="PerformSearch" class="btn btn-primary">搜索</button>
      
      @if (!string.IsNullOrEmpty(SearchTerm))
      {
          <p>搜索關鍵詞: @SearchTerm</p>
      }
      
      @code {
          private string searchTerm = string.Empty;
      
          [Parameter]
          [SupplyParameterFromQuery(Name = "q")]
          public string? SearchTerm { get; set; }
      
          protected override void OnParametersSet()
          {
              if (!string.IsNullOrEmpty(SearchTerm))
              {
                  searchTerm = SearchTerm;
              }
          }
      
          private void PerformSearch()
          {
              var query = System.Web.HttpUtility.ParseQueryString(string.Empty);
              query["q"] = searchTerm;
              
              Navigation.NavigateTo($"/search?{query}");
          }
      }

      image (6)

      5、高級路由功能

      1. 路由事件處理

      <!-- Pages/RouteAwareComponent.razor -->
      @page "/aware"
      @inject NavigationManager Navigation
      @implements IDisposable
      
      <h1>路由感知組件</h1>
      <p>位置變化次數: @locationChangeCount</p>
      
      @code {
          private int locationChangeCount = 0;
      
          protected override void OnInitialized()
          {
              Navigation.LocationChanged += OnLocationChanged;
          }
      
          private void OnLocationChanged(object? sender, LocationChangedEventArgs e)
          {
              locationChangeCount++;
              Console.WriteLine($"位置變化: {e.Location}");
              StateHasChanged(); // 通知組件重新渲染
          }
      
          public void Dispose()
          {
              Navigation.LocationChanged -= OnLocationChanged;
          }
      }

      6、布局和嵌套路由

      1. 多布局系統

      <!-- Pages/Dashboard.razor -->
      @page "/dashboard"
      @layout MainLayout
      
      <h1>儀表板</h1>
      
      
      @inherits LayoutComponentBase
      
      <div class="admin-layout">
          <nav class="sidebar">
              <h3>管理菜單</h3>
              <NavLink href="/dashboard" Match="NavLinkMatch.All">儀表板</NavLink>
              <NavLink href="/users">用戶管理</NavLink>
              <NavLink href="/settings">系統設置</NavLink>
          </nav>
      
          <main class="main-content">
              @Body
          </main>
      </div>

      2. 嵌套路由配置

      <!-- Pages/Admin.razor -->
      @page "/admin/*"
      
      <h1>管理控制臺</h1>
      
      <nav>
          <NavLink href="/admin/dashboard">儀表板</NavLink>
          <NavLink href="/admin/users">用戶</NavLink>
          <NavLink href="/admin/settings">設置</NavLink>
      </nav>
      
      <div class="admin-content">
          <!-- 嵌套路由內容 -->
      </div>

      7、完整示例應用

      1. 主布局和導航

      image (7)

      2. 導航菜單

      image (8)

      3. 用戶管理頁面

      <!-- Pages/UserManagement.razor -->
      @page "/users"
      @page "/users/{Action:string}/{Id:int}"
      
      <h1>用戶管理</h1>
      
      @if (Action == "edit" && Id > 0)
      {
          <UserEditor UserId="@Id" />
      }
      else if (Action == "create")
      {
          <UserCreator />
      }
      else
      {
          <UserList />
      }
      
      @code {
          [Parameter]
          public string? Action { get; set; }
      
          [Parameter]
          public int Id { get; set; }
      }
      <h3>編輯用戶</h3>
      <p>用戶ID: @UserId</p>
      @code {
      
      	[Parameter]
      	public int UserId
      	{
      		get; set;
      	}
      }
      <h3>添加用戶</h3>
      
      @code {
      
      }
      <h3>用戶列表</h3>
      
      @code {
      
      }

      以上就是《ASP.NET Core Blazor 路由配置和導航》的所有內容,感謝你的閱讀,希望對你有所收獲。如果可用的話,給我點個贊??吧。

      posted @ 2025-10-23 11:42  碼農剛子  閱讀(155)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 中文字幕国产原创国产| 无码人妻精品一区二区三区蜜桃| 午夜毛片不卡免费观看视频| 99精品国产丝袜在线拍国语| 你懂的在线视频一区二区| 精品国偷自产在线视频99| 亚洲欧洲精品一区二区| 欧美成人h精品网站| 日韩人妻无码精品久久| 精品一区二区三区四区色| 中文字幕波多野不卡一区| 亚洲av色综合久久综合| 国产乱人伦av在线无码| 91老熟女老人国产老太| 精品中文字幕人妻一二| 少妇人妻偷人偷人精品| 亚洲码欧洲码一二三四五| 香蕉乱码成人久久天堂爱| 久久婷婷成人综合色综合| 免费人成无码大片在线观看| 日韩欧激情一区二区三区| 东方四虎av在线观看| 亚洲色大成网站WWW永久麻豆| 久久欧洲精品成av人片| 女人喷水高潮时的视频网站| 免费无码一区无码东京热| 人妻夜夜爽天天爽三区丁香花| 日韩精品一区二区都可以| 四虎永久精品在线视频| 国产亚洲欧美另类一区二区| 九九热免费在线视频观看| 亚洲男人第一无码av网| 亚洲国产精品高清线久久| 丝袜高潮流白浆潮喷在线播放| 中文字幕国产精品av| 天啦噜国产精品亚洲精品| 国产超碰无码最新上传| 亚洲欧洲色图片网站| 礼泉县| 国产精品高清中文字幕| 巨熟乳波霸若妻在线播放|