ASP.NET Core Blazor简介和快速入门三(布局和路由)

news/2025/10/25 18:33:02/文章来源:https://www.cnblogs.com/shenchuanchao/p/19165809
​大家好,我是码农刚子。本文介绍了Blazor中的布局、路由和条件渲染功能。在布局方面,详细讲解了如何创建和应用布局组件(继承LayoutComponentBase),包括默认布局MainLayout的使用、嵌套布局的实现方式以及如何控制特定页面不应用布局(如登录页)。在路由和导航部分,简要提及了基本配置方法。最后,重点阐述了条件渲染(@if语句)和循环渲染(@foreach等)的语法和实际应用场景,通过学生信息列表等示例展示了数据绑定和动态UI生成的实现方式。这些核心功能共同构成了Blazor组件化开发的基础框架。

 一、创建和应用Blazor 布局

网站应用往往有许多公共的视图部分,比如顶部导航nav,底部的footer,管理系统的左边的menu菜单等等。Layout可以轻松实现以上的效果。

Blazor 布局是一个 Razor 组件,它与引用该布局的组件共享标记。 布局可以使用数据绑定、依赖关系注入和组件的其他功能。

1、创建布局(可以理解为母版页)

新建一个razor文件,文件顶部使用@inherits LayoutComponentBase 表示继承自LayoutComponentBase ,说明这是个母版页,使@Body作为占位。

 

编辑
@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 组件就是应用的默认布局。

Blazor 的 CSS 隔离功能将独立 CSS 样式应用于 MainLayout 组件。 按照惯例,样式由相同名称的随附样式表 MainLayout.razor.css 提供。

 

编辑

编辑

3、应用布局

在razor文件顶部申明“@layout 模板页名”来设置母版页,

 

编辑

如果一个页面没有设置模板页,(就像blazor默认项目那样),他就会使用在app.razor文件中定义的默认模板页

 

编辑

如何不设置任何模板页?

比如我们的登录的页面是不需要加通用模板的,通过@if 控制 RouteView的DefaultLayout即可

<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、嵌套布局

组件可以引用一个布局,该布局又可以引用另一个布局。 例如,嵌套布局可用于创建多级菜单结构。

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

@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 标记由前面的嵌套布局生成:

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

更多参考:

https://learn.microsoft.com/zh-cn/aspnet/core/blazor/components/layouts?view=aspnetcore-9.0

二、路由配置和导航

 ASP.NET Core Blazor 路由配置和导航 - 码农刚子 - 博客园

三、条件渲染和循环渲染

第一章中已经讲过了Blazor的语法。

1、Blazor 条件渲染

Blazor 中的 @if 语法用于根据条件动态渲染页面元素。它类似于 C# 的 if 语句,但专门用于处理 UI 渲染。请看以下示例:

@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 循环渲染

下面我们有一个list需要显示多个学生信息,@for,@do…while,@while 与foreach类似这里就不在赘述

<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简介和快速入门三(布局和路由)》的所有内容,感谢你的阅读,希望对你有所收获。如果可用的话,给我点个赞👍吧。

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

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

相关文章

实用指南:functools 是 Python 的标准库模块

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

碎碎念(0....)

积攒了一堆想法,稍微整合下大部分的都随手记在文件传输助手里了太酷了,我想做一个东方的这种效果的平台 https://aidn.jp/ 意念VR眼睛 意念VR眼镜 模型构想: 通过VR的可视化,接入语言模型,实现文字的意念输入 任务…

紫外分光光度计生产商推荐品牌:仪器厂家服务哪家最好

紫外分光光度计生产商推荐品牌:北京普析通用仪器有限责任公司 在科学仪器领域,紫外分光光度计作为一种重要的分析工具,广泛应用于化学、生物、医药、环境等多个行业。选择一款质量可靠的紫外分光光度计,对于科研和…

Elasticsearch 搭建(亲测) - 实践

Elasticsearch 搭建(亲测) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

权威调研榜单:石英砂生产线厂家TOP3榜单好评深度解析

石英砂生产线行业技术发展与市场概况 石英砂生产线作为矿山装备领域的重要组成部分,其技术水平直接影响石英砂产品的质量和生产效率。据行业统计数据显示,2025年全球石英砂生产线设备市场规模预计达到380亿元,年增长…

2025年国产液相色谱仪厂家哪家强?国产仪器权威推荐

国产液相色谱仪厂家哪家强?——北京普析通用仪器有限责任公司深度解析 在当今科学仪器领域,液相色谱仪作为重要的分析工具,广泛应用于医药、环保、食品等多个行业。而在众多国产液相色谱仪厂家中,北京普析通用仪器…

FSEventsParser脚本升级与macOS取证技术解析

本文介绍了FSEventsParser脚本的重要更新,支持Python 3和macOS 14新版格式,探讨了FSEvents在文件系统取证中的关键作用,包括文件创建删除追踪,并分享了SANS FOR518课程的最新升级内容。我回来了! 2024年5月6日 更…

大学生摸鱼日记

无聊到一定程度的时候可以记录一下近况。 2025.10.25 周六,不用早签,没课,超级爽。 几乎一整天都泡在实验室。 下了点雨,早上被窝吃人了,但考虑到拜托了学长帮忙讲题,还是早早到实验室了。 中午到校门口买的鸡蛋…

React Native启动性能优化实战:Hermes + RAM Bundles + 懒加载 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

redis食用方法

一、Redis概述 Redis是一个开源的基于Key-Value结构的NoSQL内存数据库。通常作为数据库与应用程序之间的缓存层,主要目的是减少数据库I/O压力。 二、Redis工作流程用户请求数据时,首先查询Redis缓存 若缓存命中,直接…

五笔练习

五笔练习回想以前学电脑,学打字的时候,历历在目...,现在到娃学电脑了,编个小工具给她练习~ 喜欢的自行下载:点击下载>>>

cnbook主题风格美化 —— 01(未完成)

cnbook主题风格美化 —— 01(未完成)个人自定义风格美化 整体风格偏B站吧? https://chat.deepseek.com/share/t7mk9h55qj5wety52g 目前几个解决不了的问题 本人太菜了,没有深入去学习js(还没有学),html+css会一…

2025 年热镀锌方管立柱制造厂家最新推荐榜,技术实力与市场口碑深度解析佛山/顺德/广州薄壁/异形/Q235厂家推荐

引言 在建筑、交通、市政等领域高速发展的当下,热镀锌方管立柱因出色的防腐性能与稳定的结构强度,成为工程项目核心构件。但当前市场乱象频发,厂家资质悬殊,部分厂商用劣质钢材生产,导致产品易变形腐蚀;加工工艺…

【嵌入式】IIC和SPI的比较

SPI和IIC 对SPI和IIC进行总结 二者的对比特点 SPI IIC线数 4线 2线通信类型 全双工 半双工拓扑结构 主从式,片选一对一 主从式,地址寻址,一对多速度 快 慢时序 对于两种协议,最大的区别在于:开启关闭条件 动作时间…

SpringBoot 的配置文件与日志 - 实践

SpringBoot 的配置文件与日志 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

20251025 NW

D有一个 \(h \times w\) 的网格图,有 \(n\) 个点 \((a_i, b_i)\) 以及 \(n - 1\) 条边,每条边形如 \(op \ x \ y\),表示位于 \((x, y)\) 的点与位于 \((x, y + 1) / (x + 1, y)\) 的点之间有连边(给的位置上一定有…

2025年东莞工业风扇,鼓风机,散热模组厂家权威推荐榜单:专业制造商综合实力与技术创新深度解析

随着工业4.0和智能制造时代的到来,工业散热设备作为保障生产设备稳定运行的关键组件,其技术水平和产品质量直接影响着整个生产系统的可靠性和效率。工业风扇、鼓风机和散热模组作为工业散热系统的核心部件,其制造工…

给web增加简单的ai对话功能

给 APP 加个 AI 功能,能让它变好玩、互动感更强。那咱们自己的 APP,怎么快速加上 AI 功能呢?其实不用自己从头搞,直接用现成平台提供的模型和 API 就行,今天就来聊聊怎么用阿里云百炼,通过使用通义千问API给web增…

2025 年食堂厨房设备,商用厨房设备,酒店厨房设备厂家推荐:江南星公司的全场景设备与服务解决方案解析

行业背景 2025 年国内厨房设备市场呈现 “商用驱动” 核心特征,商用设备市场占比达 54%,规模超 6000 亿元,其中食堂、酒店等场景需求尤为突出。食堂厨房需适配千人级集中供餐的高效产能与食品安全要求,酒店厨房则注…

权威调研榜单:气动旋塞阀厂家TOP3榜单好评深度解析

气动旋塞阀行业技术发展与市场概况 气动旋塞阀作为工业自动化控制系统的关键执行元件,其技术性能直接影响整个流程控制的精确度与可靠性。据行业统计数据显示,2025年全球气动旋塞阀市场规模预计达到45亿美元,年增长…