Blazor简介

Blazor 是由Microsoft开发的一款基于.NET的开源交互式Web UI框架。Blazor使开发人员能够使用C#和HTML建立全堆栈的单页应用程序,并避免使用JavaScript。Blazor基于组件模型,该模型提供了以具有强类型的符合Razor标准的页面和组件的形式构建用户界面的能力。

Blazor的加入使得.NET开发人员有机会在客户端和服务器上使用同一种编程模型,同时享受到.NET的优势,比如其功能强大的运行时,标准库,语言互操作性和辅助开发者高效开发的工具等。

在Blazor中,有两个主要的托管模型:

  • ** Blazor Server: 在此模式下,应用程序在服务器端运行,并使用SignalR实时通讯框架与浏览器进行交互。这种模型要求永久的有效连接,但是客户端的计算和下载需求会大大减低,所有的逻辑运行都在服务器端。

  • ** Blazor WebAssembly: 在此模式下,应用程序直接在客户端的WebAssembly中运行,允许C#代码在浏览器中执行,不依赖服务器。

开发要求

可使用最新版本的 Visual Studio 2022、Visual Studio for Mac 或 Visual Studio Code 来生成 Blazor 应用。

本文使用 Visual Studio 2022.

无论使用哪种开发环境,都需要安装 .NET 6.0(或更高版本)SDK。 如果要使用 Visual Studio 2022,则需要包含“ASP.NET 和 Web 开发”工作负载。 安装后,即可开始生成 Blazor 应用。

创建应用

在这里,我们创建一个Blazor Server 模式的程序。

1. 启动 Visual Studio 2022 并选择“Create a new project”。

2. 在“Create a new project”窗口中,在搜索框中键入 Blazor,然后按 Enter。

3. 选择“Blazor Server 应用”模板并选择“下一步”。

4. 在“Configure new project”窗口中,输入 BlazorApp 作为项目名称,然后选择“下一步”。

5. 在“Additional information”窗口中,如果尚未选择,则在“框架”下拉列表中选择“.NET 7.0 (标准期限支持)”,然后单击“Create”按钮。

使用解决方案资源管理器查看项目内容。

Program.cs 是启动服务器以及在其中配置应用服务和中间件的应用的入口点。

App.razor 为应用的根组件。

Pages 目录包含应用的一些示例网页。

BlazorApp.csproj 定义应用项目及其依赖项,且可以通过双击解决方案资源管理器中的 BlazorApp 项目节点进行查看。

Properties 目录中的 launchSettings.json 文件为本地开发环境定义不同的配置文件设置。创建项目时会自动分配端口号并将其保存在此文件上。

6. 运行应用

单击 Visual Studio 调试工具栏中的“开始调试”按钮(绿色箭头)以运行应用。

首次在 Visual Studio 中运行 Web 应用时,它将设置用于通过 HTTPS 托管应用的开发证书,然后提示你信任该证书。建议同意信任该证书。证书将仅用于本地开发,如果没有证书,大多数浏览器都会对网站的安全性进行投诉。

等待应用在浏览器中启动。转到以下页面后,你已成功运行第一个 Blazor 应用!

显示的页面由位于 Pages 目录内的 Index.razor 文件定义。其内容如下所示:

  • Pages/Index.razor
@page "/"

<PageTitle>Index</PageTitle>

<h1>Hello, world!</h1>

Welcome to your new app.

<SurveyPrompt Title="How is Blazor working for you?" />

它已包含将其设置为主页并显示文本 Hello, world! 和 Welcome to your new app 的代码。它还包含一个 SurveyPrompt 组件,可呈现指向 Blazor 反馈调查的链接。

在 Blazor 中生成 UI 时,通常会在同一文件中将静态 HTML 和 CSS 标记与 C# 代码混用。 若要区分这些类型的代码,可使用 Razor 语法。 Razor 语法包括前缀为 @ 符号的指令,这些指令用于分隔 C# 代码、路由参数、绑定数据、导入的类以及其他特性。

  • @page 指令:该指令为 Blazor 提供路由模板。 在运行时,Blazor 通过将此模板与用户请求的 URL 相匹配来查找要呈现的页面。 在本例中,它可能与 http://yourdomain.com/index 形式的 URL 匹配。

试用计数器

在正在运行的应用中,通过单击左侧边栏中的“Counter”选项卡导航到“Counter”页。然后应显示以下页面:

选择“Click me”按钮,在不刷新页面的情况下递增计数。若要在网页中递增计数器,通常需要编写 JavaScript,但对于 Blazor,你可以使用 C#。

可以在 Pages 目录内的 Counter.razor 文件处找到 Counter 组件的实现。

  • Pages/Counter.razor
@page "/counter"

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
private int currentCount = 0; private void IncrementCount()
{
currentCount++;
}
}
  • @code 指令:该指令声明以下块中的文本是 C# 代码。 你可以根据需要将任意数量的代码块置于组件中。 你可以在这些代码块中定义组件类成员,并通过计算、数据查找操作或其他源设置其值。 在本例中,代码定义了一个名为 currentCount 的组件成员并设置了值。

  • 成员访问指令:如果要在呈现逻辑中包含成员的值,请使用 @ 符号,后跟 C# 表达式,例如成员的名称。 在本例中,@currentCount 指令用于在

    标记中呈现 currentCount 成员的值。

在浏览器中对于 /counter 的请求(由位于顶部的 @page 指令指定)导致 Counter 组件呈现其内容。

每次点击“Click Me”按钮时:

触发 onclick 事件。

调用 IncrementCount 方法。

currentCount 为递增。

呈现该组件以显示更新的计数。

7. 添加组件

每个 razor 文件都会定义一个可重复使用的 UI 组件。

在 Visual Studio 中打开 Index.razor 文件。Index.razor 文件已存在,并且是在创建项目时创建的。它位于之前创建的 BlazorApp 目录中的 Pages 文件夹中。

通过在 Index.razor 文件末尾添加 元素,向应用主页添加 Counter。

  • Pages/Index.razor
@page "/"

<PageTitle>Index</PageTitle>

<h1>Hello, world!</h1>

Welcome to your new app.

<SurveyPrompt Title="How is Blazor working for you?" />

<Counter />

单击“热重载”按钮,以将更改应用到正在运行的应用。然后 Counter 组件将出现在主页上。

8. 修改组件

组件可以有参数,组件参数使用特性或子内容指定,这允许在子组件上设置属性。在 Counter 组件上定义参数,以指定每次点击按钮时的增量:

使用 [Parameter] 属性为 IncrementAmount 添加公共属性。

将 IncrementCount 方法更改为在递增 currentCount 值时使用 IncrementAmount。

下面的代码演示了怎样实现此目的。

  • Pages/Counter.razor
@page "/counter"

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
private int currentCount = 0; [Parameter]
public int IncrementAmount { get; set; } = 1; private void IncrementCount()
{
currentCount += IncrementAmount;
}
}

在 Index.razor 中,更新 元素以添加IncrementAmount 属性,该属性会将增量更改为 10,如以下代码中突出显示的行所示:

  • Pages/Index.razor
@page "/"

<h1>Hello, world!</h1>

Welcome to your new app.

<SurveyPrompt Title="How is Blazor working for you?" />

<Counter IncrementAmount="10" />

通过单击“热重载”按钮将更改应用。Index 组件现在具有自己的计数器,每次点击“Click me”按钮时,该计数器会递增 10,如下图所示。(/counter 处的 Counter 组件(Counter.razor)将继续按 1 递增。)

恭喜你已生成并运行首个 Blazor 应用!

9. 数据绑定和事件

在 Razor 组件中,可以将 HTML 元素数据绑定到 C# 字段、属性和 Razor 表达式值。 数据绑定支持在 HTML 和 Microsoft .NET 之间进行双向同步。

呈现组件时,数据从 HTML 推送到 .NET。 组件在事件处理程序代码执行后呈现自身,这就是为什么在触发事件处理程序后,属性更新会立即反映在 UI 中。

可使用 @bind 标记将 C# 变量绑定到 HTML 对象。 按名称将 C# 变量定义为 HTML 中的字符串。 在下面的练习中,可以看到数据绑定的示例。

创建 Todo 项

在项目的根目录(BlazorApp 文件夹)中创建一个名为 TodoItem.cs 的新文件,用于保存表示待办事项的 C# 类。

为 TodoItem 类使用以下 C# 代码。 通过使用 ? 将 Title 声明为可为空字符串。

public class TodoItem
{
public string? Title { get; set; }
public bool IsDone { get; set; } = false;
}

绑定 TodoItem 列表

现可在 Blazor 中将 TodoItem 对象集合绑定到 HTML。 若要绑定这些对象,请在 Pages/Index.razor 文件中进行以下更改:

在 @code 块中为待办项添加一个字段。 Todo 组件使用此字段来维护待办项列表的状态。

添加无序列表标记和 foreach 循环,以将每个待办项呈现为列表项 (

  • )。
    @page "/"
    
    ...
    
    <ul>
    @foreach (var todo in todos)
    {
    <li>
    <input type="checkbox" @bind="todo.IsDone" />
    <input @bind="todo.Title" />
    </li>
    }
    </ul> @code { ... private List<TodoItem> todos = new() { new TodoItem() {Title = "Item1", IsDone = true}, new TodoItem() {Title = "Item2", IsDone = false}};
    }

    动态创建元素

    • 在列表 li 下方添加一个文本输入 (input) 和一个按钮 (button)。
    • 添加 AddTodo 方法,并使用 @onclick 属性来为按钮注册方法。 点击按钮时,会调用 AddTodo C# 方法。
    • 在@code中增加AddTodo 方法,将具有指定标题的 TodoItem 添加到列表。 通过将 newTodo 设置为空字符串来清除文本输入的值。
    @page "/"
    ...
    <input placeholder="Something todo" @bind="newTodo" />
    <button @onclick="AddTodo">Add todo</button> ul>
    @foreach (var todo in todos)
    {
    <li>
    <input type="checkbox" @bind="todo.IsDone" />
    <input @bind="todo.Title" />
    </li>
    }
    </ul> @code {
    ...
    private List<TodoItem> todos = new() { new TodoItem() { Title = "Item1", IsDone = true }, new TodoItem() { Title = "Item2", IsDone = false } }; private string? newTodo; private void AddTodo()
    {
    if (!string.IsNullOrWhiteSpace(newTodo))
    {
    todos.Add(new TodoItem { Title = newTodo });
    newTodo = string.Empty;
    }
    }
    }

    点击 Add todo 查看效果

    总结

    Blazor是一款强大的Web开发框架,它为.NET开发者开辟了通往前端开发的新道路。通过使用Blazor,你可以运用你的C#和.NET技能进行全栈开发,这降低了学习入口和复杂性。

    我们在本教程中接触到了Blazor的主要特性与概念,比如组件化、数据绑定和事件以及两种运行模式。你已经明白了如何用Blazor创建单页应用,以及Blazor与其他流行前端框架的差异。希望这些知识能够为你提供一个清晰的框架,帮助你理解Blazor的优势并决定是否在你的下个项目中使用它。

    但是,记住我们只触及了表面;Blazor提供了更多的深度和复杂性等待你去探索。为了深入了解Blazor,你可以研究更复杂的例子,尝试使用Blazor去创建更实际的应用,或者深挖Blazor的文档以了解它的更多特性和优点。

    总的来说,Blazor是.NET开发者的一种优秀选择,它扩展了.NET生态系统,使得它更全面,更具可达性。Blazor最大的魅力在于它拓宽了.NET开发者的视野,让开发者不再局限后端或桌面应用,前端的世界同样可以用熟悉的语言和工具去进行开发。

    源代码地址: https://github.com/DXG88/BlazorApp

    原文地址:https://blog.baibaomen.com/c-12-blazor入门教程/

  • C# 12 Blazor入门教程的更多相关文章

    1. 移动H5开发入门教程:12点webAPP前端开发经验

      如果你是一名移动H5前端开发人员,25学堂的小编认为下面的分享的12点webAPP前端开发经验是你必须掌握的基础知识点.算是一篇移动H5开发入门教程吧! 1. viewport:也就是可视区域.对于桌 ...

    2. testng入门教程12 TestNG执行多线程测试

      testng入门教程 TestNG执行多线程测试 testng入门教程 TestNG执行多线程测试 并行(多线程)技术在软件术语里被定义为软件.操作系统或者程序可以并行地执行另外一段程序中多个部分或者 ...

    3. 《进击吧!Blazor!》系列入门教程 第一章 6.安全

      <进击吧!Blazor!>是本人与张善友老师合作的Blazor零基础入门教程视频,此教程能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力. 视频地址:https://s ...

    4. 《进击吧!Blazor!》系列入门教程 第一章 7.图表

      <进击吧!Blazor!>是本人与张善友老师合作的Blazor零基础入门教程视频,此教程能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力. 视频地址:https://s ...

    5. 《进击吧!Blazor!》系列入门教程 第一章 8.部署

      <进击吧!Blazor!>是本人与张善友老师合作的Blazor零基础入门教程视频,此教程能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力. 视频地址:https://s ...

    6. Mysql学习总结(12)——21分钟Mysql入门教程

      21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数 ...

    7. ABP入门教程12 - 展示层实现增删改查-脚本

      点这里进入ABP入门教程目录 创建目录 在展示层(即JD.CRS.Web.Mvc)的\wwwroot\view-resources\Views\下新建文件夹Course //用以存放Course相关脚 ...

    8. gulp详细入门教程

      本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

    9. 转载:TypeScript 简介与《TypeScript 中文入门教程》

      简介 TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构 ...

    10. Power BI入门教程

      题记:这篇文章不仅是Power BI的入门教程,同时相对于Qlik Sense进行了简单比较. 最近把一个Qlik Sense的示例应用手动转成了Power BI的应用,把相关步骤和遇到的问题记录如下 ...

    随机推荐

    1. Linux 下的 OpenGL 之路(九):天空盒、反射和折射

      前言 搞定了天空盒,才算是真正完成了场景的搭建,以后再要进行什么样的图形学测试,都可以在这个场景下进行.比如后面的反射.折射就是这样的例子. 写完这篇,我决定暂时结束这个系列.主要是因为我太懒了,居然 ...

    2. ENVI、ERDAS计算Landsat 7地表温度:单窗算法实现

      本文介绍基于ENVI与ERDAS软件,对Landsat 7遥感影像数据加以单窗算法的地表温度(LST)反演操作. 目录 1 原理部分与前期操作准备 1.1 图像预处理 1.2 植被指数反演 1.3 单 ...

    3. 2023-08-04:村里面一共有 n 栋房子 我们希望通过建造水井和铺设管道来为所有房子供水。 对于每个房子 i,我们有两种可选的供水方案: 一种是直接在房子内建造水井 成本为 wells[i -

      2023-08-04:村里面一共有 n 栋房子 我们希望通过建造水井和铺设管道来为所有房子供水. 对于每个房子 i,我们有两种可选的供水方案: 一种是直接在房子内建造水井 成本为 wells[i - ...

    4. 使用 VirtualBox+Vagrant 创建 CentOS7 虚拟机

      一.准备工作 1.1 软件下载 VirtualBox:Downloads – Oracle VM VirtualBox Vagrant:Install | Vagrant | HashiCorp De ...

    5. Acwing 周赛88 题解

      比赛链接 ·A题 题目描述 给定一个整数\(x\),请你找到严格大于\(x\)且各位数字均不相同的最小整数\(y\). \(1000 \le x \le 9000\) 做法分析 发现数据范围很小,那么 ...

    6. LabVIEW图形化的AI视觉开发平台(非NI Vision)VI简介

      前言 今天想和大家分享的是:仪酷LabVIEW AI视觉工具包的VI简介,如介绍内容有误,欢迎各位朋友们帮忙纠正~ 一.AI视觉工具包VI简介 已经安装好的AI工具包位于程序框图-函数选板-Addon ...

    7. vite 找不到依赖模块:[plugin:vite:dep-pre-bundle]

      问题描述: 运行项目时,出现[plugin:vite:dep-pre-bundle] 错误.这种问题一般为依赖的包未正常配置相关字段,导致vite无法找到包的入口. 遇到这种模块内.找不到引用模块的, ...

    8. Docker下elasticsearch8部署、扩容、基本操作实战(含kibana)

      欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇记录了用docker搭建ElasticS ...

    9. 【译】IntelliJ IDEA 2023.2 最新变化——JetBrains IDE 中的 AI 助手

      前言 本周所有基于 IntelliJ 的 IDE 和 .NET 工具的 EAP 版本都包含一个主要新功能:AI Assistant.本博文重点介绍我们基于 IntelliJ 的 IDE,并且即将推出专 ...

    10. RocketMQ 系列(三) 集成 SpringBoot

      RocketMQ 系列(三) 集成 SpringBoot 前两篇文章介绍了 RocketMQ 基本概念与搭建,现在以它与 SpringBoot 的结合来介绍其基本的用法. RocketMQ系列(一) ...