Blazor学习之旅 (13) Razor类库的使用
在上一篇我们学习了Blazor和JavaScript的互操作性,这一篇我们了解下如何创建和使用Razor类库。
什么是Razor类库?

我们都知道,在.NET应用程序中,我们可以通过NuGet来安装各种基础功能的类库来帮我们实现底层的基础功能从而不需要重复造轮子。在Web前端应用中,同样也涉及一些基础的功能我们希望在各个Blazor应用中复用,而不是在每个Blazor应用中都重复地写一遍。在Blazor应用中,可以通过Razor类库在多个应用程序之间共享和复用这些基础组件。Razor类库也是一种.NET项目类型,它包含 Razor 组件、页面、HTML、级联样式表 (CSS) 文件、JavaScript、图像和其他可由 Blazor 应用程序引用的静态 Web 内容。与其他 .NET 类库项目一样,Razor 类库可以捆绑为 NuGet 包并在 NuGet 包存储库(如 NuGet.org)上共享。
方式一:引用Razor类库
dotnet add reference ../MyRazorClassLibrary
方式二:打包Razor类库
dotnet add package MyRazorClassLibrary
接下来,我们就来看看如何创建一个Razor类库,又如何在Blazor应用中使用它。假设,我们需要封装一个ModalDialog(模态对话框)的Razor类库,这样我们在不同的Blazor应用中只需要引用该类库或通过NuGet安装它,就可以复用ModalDialog功能实现,而不需要单独实现一遍它。
创建一个Razor类库项目
添加一个Razor类库项目,假设我们取名为:EDT.BlazorComponent.Dialog。

将默认的Component1.razor文件重命名为ModalDialog.razor,首先将下面的Razor内容添加到ModalDialog.razor中:
@if (Show)
{
<div class="dialog-container">
<div class="dialog">
<div class="dialog-title">
<h2>@Title</h2>
</div> <div class="dialog-body">
@ChildContent
</div> <div class="dialog-buttons">
<button class="btn btn-secondary mr-auto btn-cancel" @onclick="CloseModalDialog">@CancelText</button>
<button class="btn btn-success ml-auto" @onclick="OnConfirm">@ConfirmText</button>
</div>
</div>
</div>
} @code {
[Parameter]
public string Title { get; set; } [Parameter]
public string CancelText { get; set; } = "Cancel"; [Parameter]
public string ConfirmText { get; set; } = "Ok"; [Parameter]
public RenderFragment ChildContent { get; set; } [Parameter]
public bool Show { get; set; } [Parameter]
public EventCallback OnConfirm { get; set; } public void CloseModalDialog()
{
Show = false;
}
}
顾名思义,这个组件提供了以下几个功能,方便我们在不同项目中复用:
标题
“取消”和“确认”按钮,具有可配置的标签和可管理的单击事件
可以通过 ChildContent 参数设置组件的内部内容
可以使用 Show 参数控制对话框的显示状态
为了好看点,添加以下样式内容到 ModalDialog.razor.css中:
.dialog-container {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: rgba(0,0,0,0.5);
z-index: 2000;
display: flex;
animation: dialog-container-entry 0.2s;
}
@keyframes dialog-container-entry {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.dialog {
background-color: white;
box-shadow: 0 0 12px rgba(0,0,0,0.6);
display: flex;
flex-direction: column;
z-index: 2000;
align-self: center;
margin: auto;
width: 700px;
max-height: calc(100% - 3rem);
animation: dialog-entry 0.4s;
animation-timing-function: cubic-bezier(0.075, 0.820, 0.165, 1.000);
}
@keyframes dialog-entry {
0% {
transform: translateY(30px) scale(0.95);
}
100% {
transform: translateX(0px) scale(1.0);
}
}
.dialog-title {
background-color: #444;
color: #fff2cc;
padding: 1.3rem 0.5rem;
}
.dialog-title h2 {
color: white;
font-size: 1.4rem;
margin: 0;
font-family: Arial, Helvetica, sans-serif;
line-height: 1.3rem;
}
.dialog-body {
flex-grow: 1;
padding: 0.5rem 3rem 1rem 0.5rem;
}
.dialog-buttons {
height: 4rem;
flex-shrink: 0;
display: flex;
align-items: center;
background-color: #eee;
padding: 0 1rem;
}
接下来,我们可以给它打包:
dotnet add package EDT.BlazorComponent.Dialog
这里,我们就不演示了,通过直接引用的方式来进行后续操作。
在Blazor应用中使用Razor类库
首先,我们通过添加引用的方式,将刚刚创建的Razor类库引用到我们的项目中。
dotnet add reference ../EDT.BlazorComponent.Dialog
然后,我们以 Home.razor 页面为例,在这个页面中使用刚刚的ModalDialog。
Step1. 添加命名空间
@using EDT.BlazorComponent.Dialog;
Step2. 添加ModalDialog并配置自定义内容,这里我们定义了对话框中的标题和内容,以及两个按钮的文本,并且让它显示出来(Show="true")。
<ModalDialog Title="Modal Dialog Demo" Show="true"
OnConfirm="@ChangeLanguage" ConfirmText="Yes" CancelText="No">
<p>
Are you sure to change language to English?
</p>
</ModalDialog>
Step3. 添加OnConfirm事件回调方法 ChangeLanguage,这里我们让用户点击OK按钮的时候更换一下语言:
@code {
.......
private void ChangeLanguage()
{
Culture = supportedCultures[1];
}
}
最终的效果如下图:

小结
本篇,我们了解了什么是Razor类库,然后通过一个DEMO了解了如何创建Razor类库 和 在Blazor项目中使用Razor类库。在实际开发中,我们经常会封装一些基础功能组件,在各个Blazor项目中复用,避免重复劳动。
参考代码
GitHub:https://github.com/EdisonChou/BlazorSamples/tree/main

Blazor学习之旅 (13) Razor类库的使用的更多相关文章
- 笔记-JavaWeb学习之旅13
验证码案列 昨天晚上出现的500错误原因在于验证码没有获取到,获取验证码是应该获取的是共享域中的验证码,而我把获取值得键给写成了jsp中的键,而不是内存生成图片中,然后把图片上传到共享域中的键.这两个 ...
- WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...
- WCF学习之旅—WCF第二个示例(五)
二.WCF服务端应用程序 第一步,创建WCF服务应用程序项目 打开Visual Studio 2015,在菜单上点击文件—>新建—>项目—>WCF服务应用程序.在弹出界面的“名称”对 ...
- WCF学习之旅—WCF服务部署到应用程序(十)
上接 WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...
- WCF学习之旅—WCF服务的批量寄宿(十三)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) WCF学习之旅—WCF ...
- Hadoop学习之旅三:MapReduce
MapReduce编程模型 在Google的一篇重要的论文MapReduce: Simplified Data Processing on Large Clusters中提到,Google公司有大量的 ...
- WCF学习之旅——第一个WCF示例(一)
最近需要用到WCF,所以对WCF进行了解.在实践中学习新知识是最快的,接下来先做了一个简单的WCF服用应用示例. 本文的WCF服务应用功能很简单,却涵盖了一个完整WCF应用的基本结构.希望本文能对那些 ...
- WCF学习之旅——第一个WCF示例(三)
第五步:创建客户端 WCF应用服务被成功寄宿后,WCF服务应用便开始了服务调用请求的监听工作.此外,服务寄宿将服务描述通过元数据的形式发布出来,相应的客户端就可以获取这些元数据.接下来我们来创建客户端 ...
- Guava学习笔记:Google Guava 类库简介
http://www.cnblogs.com/peida/tag/Guava/ Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, cachin ...
- 180分钟的python学习之旅
最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大.很多身边的哥们也提到Python非常的简洁方便,比如用Django搭建一个见得网站只需要半天时 ...
随机推荐
- 面试题-Netty框架
前言 Netty框架部分的题目,是我根据Java Guide的面试突击版本V3.0再整理出来的,其中,我选择了一些比较重要的问题,并重新做出相应回答,并添加了一些比较重要的问题,希望对大家起到一定的帮 ...
- 【教程】C语言入门
C语言入门 首先导入头文件 #include<stdio.h> 接下来编写主函数 #include<stdio.h> int main() { retuen 0; } 最后,在 ...
- mybatis报错Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.ArrayList and java
原因 传入参数为List<String>不能用lists != '' 判断 解决 将lists != '' 的判断去掉或者改为lists .size>0 其他 如果是Integer类 ...
- python环境配置命令
在Python中,创建新的环境通常指的是创建一个隔离的Python环境,以便在该环境中安装和管理不同版本的库,而不会影响到系统中其他Python环境的库.这通常用于解决不同项目之间的依赖冲突.下面是一 ...
- unity手机花屏
关于Camera组件中Clear Flags的理解 - 知乎 (zhihu.com) https://blog.csdn.net/yanchezuo/article/details/77337755 ...
- 函数组件的声明方式及差异+React.memo和userCallback区别
1.函数组件的声明方式及差异 普通函数声明 箭头函数声明 使用React.FC类型(TypeScript专用) interface Props { content: string } // 写法一 c ...
- 『Plotly实战指南』--样式定制基础篇
在数据可视化的世界中,一个精心设计的图表不仅能准确传达信息,还能提升整体的专业性和吸引力. 而Plotly作为Python中强大的可视化库,提供了丰富的样式定制功能,帮助我们轻松实现这一目标. 本文从 ...
- AutoFac(五)——通过lambda表达式灵活注册
按参数值不同实现不同的注册 一.定义接口 public interface InterfaceDao { public virtual void DoSomething(string type) { ...
- WPF 制作三个点从左到右过渡隐藏显示
Code: <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/win ...
- Spring连接线程的事务控制
Spring连接线程的事务控制 通过把线程ThreadLocal绑定数据库来连接Connection来控制事务 源码 实现的方式不够优雅 代码实现 pom.xml <?xml version=& ...