Blazor 基础入门

article/2025/9/13 10:44:42

Blazor 基础知识

Intro

Blazor 是微软在 .NET 里推出的一个 WEB 客户端 UI 交互的框架,

使用 Blazor 你可以代替 JavaScript 来实现自己的页面交互逻辑,可以很大程度上进行 C# 代码的复用,Blazor 对于 .NET 开发人员来说是一个不错的选择。

托管模型

Blazor 有两种托管模式,一种是 Blazor Server 模式,基于 asp.net core 部署,客户端和服务器的交互通过 SignalR 来完成,来实现客户端 UI 的更新和行为的交互。

Blazor Server runs .NET code on the server and interacts with the Document Object Model on the client over a SignalR connection
Blazor Server

另外一种是 Blazor WebAssembly 模式, 将 Blazor 应用、其依赖项以及 .NET 运行时下载到浏览器, 应用将在浏览器线程中直接执行。

Blazor WebAssembly runs .NET code in the browser with WebAssembly.
Blazor WebAssembly

两种模式各有优缺点,但是个人觉得 WebAssembly 模式的 Blazor 意义更大一些

Blazor Server 托管模型具有以下优点:

  • 下载项大小明显小于 Blazor WebAssembly 应用,且应用加载速度快得多。

  • 应用可充分利用服务器功能,包括使用任何与 .NET Core 兼容的 API。

  • 服务器上的 .NET Core 用于运行应用,因此调试等现有 .NET 工具可按预期正常工作。

  • 支持瘦客户端。例如,Blazor Server 应用适用于不支持 WebAssembly 的浏览器以及资源受限的设备。

  • 应用的 .NET/C# 代码库(其中包括应用的组件代码)不适用于客户端。

Blazor Server 托管模型具有以下局限性:

  • 通常延迟较高。每次用户交互都涉及到网络跃点。

  • 不支持脱机工作。如果客户端连接失败,应用会停止工作。

  • 如果具有多名用户,则应用扩缩性存在挑战。服务器必须管理多个客户端连接并处理客户端状态(SignalR)。

  • 需要 ASP.NET Core 服务器为应用提供服务。无服务器部署方案不可行,例如通过内容分发网络 (CDN) 为应用提供服务的方案。

Blazor WebAssembly 托管模型具有以下优点:

  • 没有 .NET 服务器端依赖,应用下载到客户端后即可正常运行。

  • 可充分利用客户端资源和功能。

  • 工作可从服务器转移到客户端。

  • 无需 ASP.NET Core Web 服务器即可托管应用。无服务器部署方案可行,例如通过内容分发网络 (CDN) 为应用提供服务的方案。

Blazor WebAssembly 托管模型具有以下局限性:

  • 应用仅可使用浏览器功能。

  • 需要可用的客户端硬件和软件(例如 WebAssembly 支持)。

  • 下载项大小较大,应用加载耗时较长。

  • .NET 运行时和工具支持不够完善。例如,.NET Standard 支持和调试方面存在限制。

项目结构

Blazor 结合了 Razor Page 的开发模式,可以使用 Razor 的语法,文件结构也和 Razor Page 的模式有些类似

Blazor 是以组件为核心的,页面所有的部分都是一个组件

Blazor WebAssembly 对应的 SDK 是 Microsoft.NET.Sdk.BlazorWebAssembly,来看一下具体的项目文件:

<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"><PropertyGroup><TargetFramework>net6.0</TargetFramework></PropertyGroup><ItemGroup><PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.0-preview.4.21253.5" /><PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.0-preview.4.21253.5" PrivateAssets="all" /></ItemGroup></Project>
project-structure
  • App.razor: Blazor WebAssembly 应用根组件

  • Program.cs: 配置应用 WebAssembly host 的入口文件

  • _Imports.razor: 和 Razor Page 一样,可以在这里定义一些 Razor Page 或者组件里公用的 namespace

  • Pages:包含可以路由到的页面,page 需要使用 @page 指令指定

  • Shared:包含一些公共的组件或者样式定义

  • wwwroot: 应用公共静态文件的根目录

Routing

在页面组件上通过 @page 指令指定页面路由 @page "/path",就会生成一个 RouteAttribute 以支持路由,路由支持像 asp.net core 一样的路由约束和 Path 参数

@page "/RouteParameter/{text}"<h1>Blazor is @Text!</h1>@code {[Parameter]public string Text { get; set; }
}
@page "/RouteParameter/{text?}"<h1>Blazor is @Text!</h1>@code {[Parameter]public string Text { get; set; }protected override void OnInitialized(){Text = Text ?? "fantastic";}
}
@page "/user/{Id:int}"<h1>User Id: @Id</h1>@code {[Parameter]public int Id { get; set; }
}

Catch-all

@page "/catch-all/{*pageRoute}"@code {[Parameter]public string PageRoute { get; set; }
}

Interop

Model Binding

最基本的我们需要了解如何做数据绑定,

<div><input type="checkbox" checked="@item.IsCompleted" /><h4>@item.TodoTitle</h4> -- <span class="small">@item.CreatedTime.ToStandardTimeString()</span>
</div>
<div class="todo-item-details"><p>@item.TodoContent</p>
</div>
@code
{public List<TodoItem> TodoItems { get; private set; }protected override async Task OnInitializedAsync(){TodoItems = await scheduler.GetAllTasks();await base.OnInitializedAsync();}
}

Event Binding

在现在的 Blazor 里,事件绑定是偏向于使用原生的事件名,比如按钮的事件通过 @onclick 方式来绑定事件,例如下面的示例:

<button @onclick="AddNewTodo" class="btn btn-info">Add new todo</button>

为 button 指定了一个 onclick 事件处理器

Call JS method

执行 JS 方法有时候是不可缺少的一部分,因为很多组件都是 JS 的,借助于此,我们就可以直接调用  JS 的方法来实现一些组件功能,示例如下,分是否有返回值可以分为两类:

With return value

@inject IJSRuntime JS
@code {private MarkupString text;private async Task ConvertArray(){text = new(await JS.InvokeAsync<string>("convertArray", quoteArray));}
}

Without return value

@inject IJSRuntime JS
@code {private Random r = new();private string stockSymbol;private decimal price;private async Task SetStock(){stockSymbol = $"{(char)('A' + r.Next(0, 26))}{(char)('A' + r.Next(0, 26))}";price = r.Next(1, 101);await JS.InvokeVoidAsync("displayTickerAlert1", stockSymbol, price);}
}

More

更多关于 Blazor 相关的知识可以参考微软的文档

References

  • https://docs.microsoft.com/en-us/aspnet/core/blazor/?view=aspnetcore-5.0

  • https://docs.microsoft.com/en-us/aspnet/core/blazor/hosting-models?view=aspnetcore-5.0

  • https://docs.microsoft.com/en-us/aspnet/core/blazor/fundamentals/routing?view=aspnetcore-5.0

  • https://docs.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-javascript-from-dotnet?view=aspnetcore-5.0

  • https://docs.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-dotnet-from-javascript?view=aspnetcore-5.0

  • https://docs.microsoft.com/en-us/dotnet/api/microsoft.jsinterop.ijsruntime?view=dotnet-plat-ext-6.0


http://chatgpt.dhexx.cn/article/7k2CsRpX.shtml

相关文章

Blazeds学习

BlazeDS是一个基于服务器的Java远程调用&#xff08;remoting&#xff09;和Web消息传递&#xff08;messaging&#xff09;技术&#xff0c;使得后台的Java应用程序和运行在浏览器上的Flex应用程序能够相互通信 一个BlazeDS应用包括两个部分&#xff1a;一个客户端应用程序和…

Blazeds初步

客户端应用 Blazeds包括客户端和服务端应用。客户端应用是典型的Adobe flex或者AIR应用。Flex和AIR应用使用flex组件和blazeds服务通信&#xff0c;包括Remote Object、HTTPService、WebService、Produce和Consumer。其中的HTTPService、WebService、Produce和Consumer是Flex S…

BlazeDS配置实例

.什么是BlazeDS BlazeDS is the server-based Java remoting and web messaging technology that enables developers to easily connect to back-end distributed data and push data in real-time to Adobe Flex and Adobe AIR™ applications for more responsive rich Inte…

Bazel

bazel&#xff1a;是一个可以快速构建和测试任意规模软件的编译工具&#xff0c;能够用来编译大部分语言。Bazel使用分布式缓存和增量构建方法&#xff0c;使得编译更加快速。 Bazel 主要文件 使用 Bazel 管理的项目一般包含以下几种 Bazel 相关的文件&#xff1a;WORKSPACE&a…

BlazeDS

BlazeDS 为使用Flex 或者AIR 的客户端程序提供了高度可扩展的远程访问和消息服务。 blazeds :是一门技术&#xff0c;是一门面向AS的前后台通讯框架 在服务器端&#xff1a;提供3种服务&#xff0c;远程调用&#xff08;remoting-config.xml中配置&#xff09;&#xff0c;访问…

Blazeds(一)

Blazeds体系结构 一个Blazeds应用包含了一个运行在浏览器或者Adobe AIR的客户端应用并且和J2EE应用服务端通信。客户端可以是Flex也可以是结合Flex、HTML/JavaScript的应用程序。 整个体系主要包括通道、端点、消息、服务、目的地、适配器等&#xff0c;把这些搞懂也就…

Blazor 简介

Blazor 是一个用于使用 .NET 生成交互式客户端 Web UI 的框架&#xff1a; 使用 C# 代替 JavaScript 来创建丰富的交互式 UI。共享使用 .NET 编写的服务器端和客户端应用逻辑。将 UI 呈现为 HTML 和 CSS&#xff0c;以支持众多浏览器&#xff0c;其中包括移动浏览器。 使用 .…

blaze介绍

sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare 项目联系 QQ&#xff1a;231469242 FICO FICO&#xff08;NYSE: FICO&#xff09;是全…

BlazePose

摘要 我们提出了BlazePose&#xff0c;一种轻量级卷积神经网络架构&#xff0c;用于人体姿态估计&#xff0c;可用于移动设备上的实时推断。在推理过程中&#xff0c;网络为一个人产生33个身体关键点&#xff0c;在Pixel 2手机上以每秒30帧以上的速度运行。这使得它特别适合姿态…

BlazeDS介绍

概况 BlazeDS是用来处理J2EE服务器与远程客户端之间远程通信的组件,它以Servlet的形式部署在J2EE容器里,专门负责处理通信。一般而言,远程客户端采用Flex编写,因为Flex组件中对通信细节进行了良好的封装,使得Flex程序员不必关心通信细节。 图1 BlazeDS概况 BlazeDS应用程…

初探blazeDS

blazeDS是一套面向actionscript的前后台通信框架。 在服务器端&#xff0c;blazeDS以servlet的方式存在于java应用服务器上。它默认提供3中服务&#xff0c;远程调用&#xff08;在remoting-config.xml中配置&#xff09;、访问代理&#xff08;proxy-config.xml&#xff09;、…

BlazeDS详解

一、Blazeds初步 客户端应用 Blazeds包括客户端和服务端应用。客户端应用是典型的Adobe flex或者AIR应用。Flex和AIR应用使用flex组件和blazeds服务通信&#xff0c;包括Remote Object、HTTPService、WebService、Produce和Consumer。其中的HTTPService、WebService、Produce和…

MySQL配置Amoeba中间件

MySQL配置Amoeba中间件 Amoeba介绍环境配置安装Amoeba配置Amoeba配置文件配置dbServers.xml&#xff0c;设置数据库&#xff0c;登录MySQL的账号和密码 启动Amoeba注意事项 Amoeba介绍 Amoeba是一个以MySQL为底层数据存储&#xff0c;并对应用提供MySQL协议接口的proxy。它集中…

MySQL主从复制和基于Amoeba的读写分离部署

文章目录 MySQL主从复制和基于Amoeba读写分离什么是主从复制&#xff1f;为什么要有MySQL主从复制&#xff1f;什么是读写分离&#xff1f;一、MySQL主从复制原理二、主从复制的工作过程三、主从复制方式1、异步复制方式2、半同步复制/增强半同步复制3、全同步复制4、多线程复制…

amoeba mysql下载_amoeba数据库中间件透明实现MYSQL读写分离

Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层&#xff0c;它主要在应用层访问MySQL的 时候充当SQL路由功能&#xff0c;专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(…

mysql amoeba_MySQL基于Amoeba实现读写分离

读写分离应用分析&#xff1a; 在企业用户中&#xff0c;在大量的数据请求下&#xff0c;单台数据库将无法承担所有读写操作。解决方法: 配置多台数据库服务器以实现主从复制读写分离。 1、基于程序代码内部实现 在代码中根据select、 insert 进行路由分类&#xff0c;这种方法…

mysql amoeba 配置_Amoeba新版本MYSQL读写分离配置

官方简介 Amoeba的中文意思是变型虫 主要解决&#xff1a; • 降低 数据切分带来的复杂多数据库结构 • 提供切分规则并降低 数据切分规则 给应用带来的影响 • 降低db 与客户端的连接数 • 读写分离 个人简单描述 可能你还没明白Amoebla这鬼东西主要干麻的呢&#xff01;比方说…

amoeba mysql_Mysql 基于 Amoeba 的 读写分离

首先说明一下amoeba 跟 MySQL proxy在读写分离的使用上面的区别&#xff1a; 在MySQL proxy 6.0版本 上面如果想要读写分离并且 读集群、写集群 机器比较多情况下&#xff0c;用mysql proxy 需要相当大的工作量&#xff0c;目前mysql proxy没有现成的 lua脚本。mysql proxy根本…

amoeba mysql binary_amoeba安装与实现amoeba for mysql读写分离

运行环境 l CentOS6.3 l Jdk1.6.0_30 l amoeba-mysql-binary-2.2.0 l amoeba&#xff1a;192.168.88.17 l master1&#xff1a;192.168.88.10 l slave1&#xff1a;192.168.88.11 一&#xff1a; 安装jdk1.5以上版本 1.1 卸载centos服务器自带版本jdk 1.1.1 …

amoeba-mysql主从复制配置

amoeba-mysql主从复制配置 主mysql192.168.8.186 1. 同步时间ntpdate ntp.org.cn 2. 打开mysql配置文件/etc/my.cnf&#xff0c;在mysqld下添加 a) log-binmaster-bin ---------启动二进制日志系统 b) server-id1 ---------服务id&#xff0c;主服务器server-id比从服务器serv…