上一篇我们学习了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

作者:周旭龙

出处:https://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

Blazor学习之旅 (13) Razor类库的使用的更多相关文章

  1. 笔记-JavaWeb学习之旅13

    验证码案列 昨天晚上出现的500错误原因在于验证码没有获取到,获取验证码是应该获取的是共享域中的验证码,而我把获取值得键给写成了jsp中的键,而不是内存生成图片中,然后把图片上传到共享域中的键.这两个 ...

  2. WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...

  3. WCF学习之旅—WCF第二个示例(五)

    二.WCF服务端应用程序 第一步,创建WCF服务应用程序项目 打开Visual Studio 2015,在菜单上点击文件—>新建—>项目—>WCF服务应用程序.在弹出界面的“名称”对 ...

  4. WCF学习之旅—WCF服务部署到应用程序(十)

    上接  WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...

  5. WCF学习之旅—WCF服务的批量寄宿(十三)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) WCF学习之旅—WCF ...

  6. Hadoop学习之旅三:MapReduce

    MapReduce编程模型 在Google的一篇重要的论文MapReduce: Simplified Data Processing on Large Clusters中提到,Google公司有大量的 ...

  7. WCF学习之旅——第一个WCF示例(一)

    最近需要用到WCF,所以对WCF进行了解.在实践中学习新知识是最快的,接下来先做了一个简单的WCF服用应用示例. 本文的WCF服务应用功能很简单,却涵盖了一个完整WCF应用的基本结构.希望本文能对那些 ...

  8. WCF学习之旅——第一个WCF示例(三)

    第五步:创建客户端 WCF应用服务被成功寄宿后,WCF服务应用便开始了服务调用请求的监听工作.此外,服务寄宿将服务描述通过元数据的形式发布出来,相应的客户端就可以获取这些元数据.接下来我们来创建客户端 ...

  9. Guava学习笔记:Google Guava 类库简介

    http://www.cnblogs.com/peida/tag/Guava/ Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, cachin ...

  10. 180分钟的python学习之旅

    最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大.很多身边的哥们也提到Python非常的简洁方便,比如用Django搭建一个见得网站只需要半天时 ...

随机推荐

  1. 标准javabean

    1.javabean介绍 javabean,名为实体类,封装数据的类 前面我们写的类都是实体类,但我们写的不是标准的实体类 . 2.标准的javabean写法 如图 3.快捷键 一个成员变量就要写两个 ...

  2. 用99元买的服务器搭一套CI/CD系统

    故事的开始是这样的:无聊的时候在阿里云买了一个99/年的服务,上面部署了一个Git服务,用于托管自己无聊时写的一些代码,顺便也拿它做开发服务器.为了方便应用管理,起初用docker来管理和部署应用,后 ...

  3. STM32F4_HAL_CAN总线注意事项

    如果CAN总线没有连接其他设备,即HL是悬空状态,则发送会失败,下图的Error_Handler需要屏蔽,否则会造成系统卡顿,或影响其他功能模块的使用 /* ********************* ...

  4. BuildAssetBundleOption.DisableWriteTypeTree和粒度问题

  5. Unbuntu16搭建Kafka环境总结

    1.安装Kafka 环境说明 OS:Ubuntu 16.04 Zookeeper:zookeeper 3.4.5 Kafka:kafka_2.11-0.11.0.0 jdk:jdk8(Kafka启动需 ...

  6. 判断返回值长度(比如是否为空),执行后续步骤(if..else、len的用法)

    爬基金数据,净值因涨跌不同,对应的元素路径也不会一样 比如当天是涨的时候,涨跌元素的class信息为"<span class="fix_dwjz  bold ui-color ...

  7. 康谋分享 | 直面AD/ADAS快速开发挑战:IVEX自动驾驶场景管理及分析平台!

    过去十年,自动驾驶和高级驾驶辅助系统 (AD/ADAS) 软件和硬件的开发成为了各大汽车公司的主要投资目标之一.各大汽车公司对 AD/ADAS 持续不断的投资加快了 AD/ADAS 组件的开发周期,但 ...

  8. Visual Studio 2022 划词翻译插件!该插件可以方便地翻译变量名、类名、方法名等单词,帮助您更轻松地理解和使用代码。

    EnTranslate一款简单的划词翻译插件 简介 支持划词翻译(鼠标悬浮到单词上方将自动翻译) 支持播放单词发音 支持调用在线接口翻译 强大的单词拆分能力: 支持驼峰, 下划线形式等各种单词拆分 丰 ...

  9. 图解-六种常见开源协议的比较(GPL,Mozilla,LGPL,BSD,Apache,MIT)

    附: 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)

  10. Python3_模块(一)

    脚本是用 python解释器来编程,如果从 Python解释器退出再进入,那么你定义的所有的方法和变量就都消失了.为此 Python提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器 ...