Blazor学习之旅(7)布局
大家好,我是Edison。
本篇,我们来了解下在Blazor中的布局。
什么是布局
Blazor 中的布局可以让我们编写的页面具有相同的导航菜单和页头页脚部分,提高通用代码的复用性,通过一次性的编写通用代码从而减少重复劳动。
默认Blazor布局
如果从 Blazor 项目模板创建了 Blazor 应用,则该应用的默认布局为 Shared/MainLayout.razor 组件。
查看MainLayout.razor组件,我们可以发现:
(1)布局组件必须继承于LayoutComponentBase类
(2)必须要在引用组件的位置添加@Body指令
(3)不包含@page指令因为它不直接处理请求
@inherits LayoutComponentBase <PageTitle>EDT.BlazorServer.App</PageTitle> <div class="page">
<div class="sidebar">
<NavMenu />
</div> <main>
<div class="top-row px-4">
<a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a>
</div> <article class="content px-4">
@Body
</article>
</main>
</div>
编写Blazor布局
编写一个Blazor布局组件和其他组件类似,通常将其放在"Shared"目录下供所有页面共享。例如,下面就编写一个布局组件的示例(来源于Microsoft Learn)—BlazingPizzasMainLayout.razor:
@inherits LayoutComponentBase <header>
<h1>Blazing Pizza</h1>
</header> <nav>
<a href="Pizzas">Browse Pizzas</a>
<a href="Toppings">Browse Extra Toppings</a>
<a href="FavoritePizzas">Tell us your favorite</a>
<a href="Orders">Track Your Order</a>
</nav> @Body <footer>
@new MarkdownString(TrademarkMessage)
</footer> @code {
public string TrademarkMessage { get; set; } = "All content is © Blazing Pizzas 2022";
}
在这个示例中,满足了刚刚所说的3个要点,接下来就在组建中来使用这个布局。
使用Blazor布局
这里我们假设在另一个组件中使用上面编写的那个Blaozr布局,通过@layout指令即可快速应用布局:
@page "/FavoritePizzas/{favorite}"
@layout BlazingPizzasMainLayout <h1>Choose a Pizza</h1> <p>Your favorite pizza is: @Favorite</p> @code {
[Parameter]
public string Favorite { get; set; }
}
下图说明了组件和布局如何一起呈现最终的HTML效果:
通常在Blazor应用中,我们会直接在App.razor中设置默认的布局组件,这样就可以将布局应用于该Blazor应用中的所有组件。
在App.razor中,通过在标签中设置DefaultLayout属性即可:
<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>
此外也可以在_Imports.razor文件中覆盖默认布局设置,如下所示:
@using System.Net.Http
......
@layout BlazingPizzasMainLayout
小结
本篇,我们了解了在Blazor中的布局。
下一篇,我们学习一下MudBlazor这个UI组件库,有了它我们就可以快速开发一个好看的企业级应用系统了。
参考资料
Microsoft Learn,《使用Blazor构建Web应用程序》
Blazor学习之旅(7)布局的更多相关文章
- 我的Android学习之旅(转)
去年大概在七月份的时候误打误撞接触了一阵子Android,之后由于工作时间比较忙,无暇顾及,九月份的时候自己空闲的时间比较多,公司相对来说加班情况没以前严重.开启了个人的Android学习之旅,初衷是 ...
- 我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法
本文参考: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html http://www.blogjava.net/ ...
- 滴滴Booster移动APP质量优化框架 学习之旅
推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 一.Booster简介 Booster是滴滴最近开源一个的移动应 ...
- web前端学习之旅笔记01--HTML
web前端学习之旅笔记01--HTML HTML最容易上手,但也易忘,实际开发中有时需要查阅官方文档,小伙伴们别忘了哟! HTML 教程 (w3school.com.cn) HTML是网页的骨架负责页 ...
- WCF学习之旅—第三个示例之四(三十)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) WCF学习之旅—第三个示例之三(二十九) ...
- Hadoop学习之旅二:HDFS
本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...
- WCF学习之旅—第三个示例之二(二十八)
上接WCF学习之旅—第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1) 使用NuGet下载最新版的Entity Fram ...
- WCF学习之旅—第三个示例之三(二十九)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...
- WCF学习之旅—WCF服务部署到IIS7.5(九)
上接 WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...
- WCF学习之旅—WCF服务部署到应用程序(十)
上接 WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...
随机推荐
- MySQL函数-根据子节点查询所有父节点名称
背景 公司的一个业务系统中有区域表,整个区域是一个树结构,为了方便根据某一父节点查询所有叶子节点,提供了一个额外的字段path,按照分隔符存储了从根节点到当前节点的总路径. 表结构如下: create ...
- udl(Universal Data Link)通用数据连接文件
新建文本文档 更改后缀名为.udl(注意小点) 然后打开运行 配置并测试 改回后缀名.txt(有个小点哦) 打开就是了
- nodejs终端字符样式和进度条
Nodejs为终端字符增加样式 只有黑白的色调对于比较复杂的命令行程序来说就显得太单调了,我们可以为命令行程序增加样式使得程序更加友好! 安装package: npm install -S chalk ...
- 一文速通Python并行计算:09 Python多进程编程-进程之间的数据同步-基于互斥锁、递归锁、信号量、条件变量、事件和屏障
一文速通 Python 并行计算:09 Python 多进程编程-进程之间的数据同步-基于互斥锁.递归锁.信号量.条件变量.事件和屏障 摘要: 多进程同步机制包括互斥锁.递归锁.信号量.条件变量.事件 ...
- thinkphphp 计算分页 和分页总数 和sql计算分页 php
利用page计算分页 $p=input('p')?input('p'):1; $limit=6; $res=db('points_log')->where(['p_uid'=>$uid,' ...
- Vue(五)—Class与style绑定
Vue-Class与style绑定 class.style都属于attribute,所以通过v-bind来绑定 针对class.style属性,v-bind可以通过对象或数组去指定 绑定Html Cl ...
- n8n 快速入门
今天,我将为大家介绍一个当前非常流行的可视化智能体搭建平台--n8n.n8n(发音为 "n-eight-n")是一个强大的自动化工具,它能够帮助您轻松地将任何具有API的应用程序与 ...
- 将 Excel 拼接为 SQL 脚本
好像半年前,我就有写过将 Excel 数据, 逐条 或 批量 插入 mysql 数据库, 那时候正在建库嘛, 想着弄个脚本来批量刷新和处理. 工具当时用的 pandas, 这个, 强的一批的工具, 无 ...
- 网络编程:C10K问题
C10K问题 C10K问题就是如何一台物理机上同时服务10000个用户?C代表并发,10K就是10000 C10K 问题是由一个叫 Dan Kegel 的工程师提出并总结归纳的,你可以通过访问http ...
- wso2~对接外部认证系统keycloak
在 WSO2 Identity Server 或 WSO2 API Manager 中,Identity Providers (身份提供者) 功能允许您将外部身份管理系统(如 Keycloak.Azu ...