中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

ASP.NET Core Blazor簡介(jie)和(he)快速入(ru)門三(布局和(he)路由(you))

?大家好,我是碼農剛子本文介紹了Blazor中的布局、路由和條件渲染功能。在布局方面,詳細講解了如何創建和應用布局組件(繼承LayoutComponentBase),包括默認布局MainLayout的使用、嵌套布局的實現方式以及如何控制特定頁面不應用布局(如登錄頁)。在路由和導航部分,簡要提及了基本配置方法。最后,重點闡述了條件渲染(@if語句)和循環渲染(@foreach等)的語法和實際應用場景,通過學生信息列表等示例展示了數據綁定和動態UI生成的實現方式。這些核心功能共同構成了Blazor組件化開發的基礎框架。

 一(yi)、創建和應(ying)用Blazor 布局

網站應(ying)用(yong)往往有許(xu)多公(gong)共的(de)視圖部(bu)分,比(bi)如(ru)頂部(bu)導航nav,底部(bu)的(de)footer,管(guan)理系統的(de)左邊的(de)menu菜單等(deng)等(deng)。Layout可(ke)以(yi)輕松實現以(yi)上(shang)的(de)效果(guo)。

Blazor 布(bu)局(ju)是一個 Razor 組件,它與引用該布(bu)局(ju)的(de)(de)組件共(gong)享標記。 布(bu)局(ju)可以使(shi)用數據綁定、依(yi)賴關系注入和組件的(de)(de)其他(ta)功(gong)能。

1、創建布局(可以理解為母版頁)

新(xin)建一個razor文(wen)件(jian),文(wen)件(jian)頂部使(shi)用@inherits LayoutComponentBase 表示繼承自LayoutComponentBase ,說明這是個母版頁(ye),使(shi)@Body作為占位(wei)。

 17db26a2fc59811f252472259a25564c

@inherits LayoutComponentBase

<PageTitle>Doctor Who? Database</PageTitle>

<header>
    <h1>Doctor Who? Database</h1>
</header>

<nav>
    <a href="main-list">Main Episode List</a>
    <a href="search">Search</a>
    <a href="new">Add Episode</a>
</nav>

@Body

<footer>
    @TrademarkMessage
</footer>

@code {
    public string TrademarkMessage { get; set; } ="CSharp精選營";
}

2、MainLayout 組件

在從 Blazor 項目模板創建的應用中,MainLayout 組件就是應(ying)用的默(mo)認布局(ju)。

Blazor 的 CSS 隔離功能將獨立 CSS 樣式應用于 MainLayout 組件。 按照慣例,樣式由相同名稱的隨附樣式表 MainLayout.razor.css 提供。

 4e72d0845945faae717cbd8bc4e4dc47

e2f8774f69788dd6c9469c6be0cee86a?

3、應用布局

在razor文件頂部(bu)申明“@layout 模板(ban)頁(ye)名”來設置母版頁(ye),

 bc1edcdda470ec5d61fc422465d5e24e

如果一個頁面沒(mei)有設置模板(ban)頁,(就(jiu)像(xiang)blazor默認項(xiang)目那樣(yang)),他就(jiu)會使用在app.razor文件中定義的默認模板(ban)頁

 07c69bc84df89396eb47a0f95384f6b9?

如何不設置任何模板頁?

比如我們的(de)登(deng)錄(lu)的(de)頁面是不需要(yao)加通用模板的(de),通過(guo)@if 控制 RouteView的(de)DefaultLayout即(ji)可

<Router AppAssembly="@typeof(App).Assembly">
	<Found Context="routeData">
		@if (routeData.PageType == typeof(Pages.LayoutSample))
		{
			<RouteView RouteData="@routeData" />
		}
		else
		{
			<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>

4、嵌套布局

組件可以引用(yong)一個(ge)布(bu)(bu)局,該(gai)布(bu)(bu)局又可以引用(yong)另一個(ge)布(bu)(bu)局。 例如,嵌套布(bu)(bu)局可用(yong)于創建多級菜單結構。

以下示例演示如何使(shi)用嵌套布局:

@inherits LayoutComponentBase
@layout ProductionsLayout

<PageTitle>Doctor Who? Database</PageTitle>
<header>
    <h1>Doctor Who? Database</h1>
</header>
<nav>
    <a href="main-episode-list">Main Episode List</a>
    <a href="episode-search">Search</a>
    <a href="new-episode">Add Episode</a>
</nav>

@Body

<footer>
    @TrademarkMessage
</footer>

@code {
    public string TrademarkMessage { get; set; } =
        "CSharp精選營";
}

ProductionsLayout 組件包含頂級布局元素,其中包含有標頭 (<header>...</header>) 和頁腳 (<footer>...</footer>) 元素。 帶有DoctorWhoLayout組件的 Episodes 會在@Body出現的位置顯示。

@inherits LayoutComponentBase

<header>
    <h1>Productions</h1>
</header>

<nav>
    <a href="main-production-list">Main Production List</a>
    <a href="production-search">Search</a>
    <a href="new-production">Add Production</a>
</nav>

@Body

<footer>
    Footer of Productions Layout
</footer>

以下呈現的 HTML 標記由前面(mian)的嵌(qian)套布局生(sheng)成:

<header><h1>Productions</h1></header>
<nav><a href="main-production-list">Main Production List</a>
    <a href="production-search">Search</a>
    <a href="new-production">Add Production</a>
</nav>
<header><h1>Doctor Who? Database</h1></header>
<nav><a href="main-episode-list">Main Episode List</a>
    <a href="episode-search">Search</a>
    <a href="new-episode">Add Episode</a>
</nav>
<footer>CSharp精選營</footer>
<footer>
    Footer of Productions Layout
</footer>

更多參考:

二、路由配置和導航

 ASP.NET Core Blazor 路由配置和導航 - 碼農剛子 - 博客園

三、條件渲染和循環渲染

第一章中已經(jing)講過了(le)Blazor的(de)語法。

1、Blazor 條件渲染

Blazor 中的 @if 語法(fa)用于根據條件動態渲(xuan)染(ran)頁(ye)面元素。它類(lei)似于 C# 的 if 語句,但專門(men)用于處理 UI 渲(xuan)染(ran)。請看以下示例(li):

@if (isLoading)
{
   <p>加載中...</p>
}
else
{
   <p>加載完成!</p>
}
@code {
   private bool isLoading = true;
   protected override void OnInitialized()
   {
       // 模擬加載完成
       Task.Delay(2000).ContinueWith(_ =>
       {
           isLoading = false;
           InvokeAsync(StateHasChanged);
       });
   }
}

你可以嵌套多個 @if 或結合 else if 使用:

@if (userRole == "Admin")
{
   <p>歡迎管理員!</p>
}
else if (userRole == "User")
{
   <p>歡迎普通用戶!</p>
}
else
{
   <p>請登錄。</p>
}
@code {
   private string userRole = "Admin";
}

2、Blazor 循環渲染

下面(mian)我們有(you)一(yi)個(ge)list需要顯示(shi)多(duo)個(ge)學(xue)生信息(xi),@for,@do…while,@while 與(yu)foreach類似(si)這里就不在贅述

<h3>用戶列表</h3>

<table>
	<thead>
		<tr>
			<th>Name</th>
			<th>Age</th>
			<th>Gender</th>
		</tr>
	</thead>
	<tbody>

		@foreach (var item in list)
		{
			<tr>
				<td>@item.Name</td>
				<td>@item.Age</td>
				@switch (item.Gender)
				{
					case 0:
						{
							<td>男</td>
							break;
						}
					case 1:
						{
							<td>女</td>
							break;
						}
					case 2:
						{
							<td>未知</td>
							break;
						}

				}
			</tr>
		}
	</tbody>

</table>


@code {
	List<User> list = new List<User>();
	User User1 = new User()
		{
			Name = "John",
			Age = 20,
			Gender = 2,
		};
	User User2 = new User()
		{
			Name = "Sub",
			Age = 22,
			Gender = 0,
		};
	protected override void OnInitialized()
	{
		list.Add(User1);
		list.Add(User2);
	}

	public class User
	{
		public string Name { get; set; } = string.Empty;
		public int Age { get; set; }
		public int Gender { get; set; } // 0: 男, 1: 女, 2: 未知
		
	}
}

image

 以上就是《ASP.NET Core Blazor簡介和快(kuai)速(su)入門三(布局和路由)》的所有內容,感謝你(ni)(ni)的閱讀,希望對你(ni)(ni)有所收獲。如果可(ke)用的話,給我(wo)點個(ge)贊(zan)??吧。

posted @ 2025-10-25 18:25  碼農剛子  閱讀(228)  評論(4)    收藏  舉報