【使用Blazor构建web应用程序 .NET 6篇 下】

ASP.NET Blazor托管模型有哪些? 今天我们来说说Blazor的三种部署方式,如果大家还不了解Blazor,那么我先简单介绍下BlazorBlazor 是一种 .NET 前端 Web 框架,在单个编程模型中同时支持服务器端呈现和客户端交互性:● 使用 C# 创建丰富的交互式 UI。● 共享使用 .NET 编写的服务器端和客户端应用逻辑。● 将 UI 呈现为 HTML 和 CSS,以支持众多浏览器,其中包括移动浏览器。● 使用 .NET 和 Blazor 生成混合桌面和移动应用。 阅读详情

这篇下是机翻,就是单纯为了把两年前的坑添上!没有任何其他不良动机!😃
在 Blazor 应用程序中将控件绑定到数据

Blazor 使你能够将 HTML 控件绑定到属性,以便在用户界面 (UI) 中自动显示变化的值。

假设你正在开发一个页面,该页面从客户那里收集有关其披萨偏好的信息。 你想要从数据库加载该信息并使客户能够进行更改,例如记录他们最喜欢的配料。 当用户执行更改或数据库进行更新时,你希望尽快在 UI 中显示新值。

在本单元中,你将了解如何在 Blazor 中使用数据绑定将 UI 元素与数据值、属性或表达式相关联。

什么是数据绑定?
如果希望 HTML 元素显示值,可以编写代码来更改显示内容。 如果值发生更改,则需要编写额外的代码以更新显示内容。 在 Blazor 中,可以使用数据绑定将 HTML 元素连接到字段、属性或表达式。 这样,当值发生更改时,HTML 元素便会自动更新。 更新通常在更改后迅速发生,并且你无需编写任何更新代码。

若要绑定控件,可以使用 @bind 指令:

@page "/"

<p>
    Your email address is:
    <input @bind="customerEmail" />
</p>

@code {
    private string customerEmail = "john.doe@contoso.com"
}

在上述页面中,每当 customerEmail 变量更改其值时, 值都会更新。

备注

控件(如 )仅在组件呈现时才会更新其显示内容,而在字段值发生更改时,它不会更新。 由于 Blazor 组件在执行任何事件处理程序代码后呈现,因此实际上通常会快速显示更新。
将元素绑定到特定事件
@bind 指令非常智能,并且了解它所使用的控件。 例如,在将值绑定到文本框 时,它将绑定 value 属性。 HTML 复选框 具有 checked 属性,而不是 value 属性。 @bind 属性将自动改用此 checked 属性。 默认情况下,该控件绑定到 DOM onchange 事件。 例如,请考虑以下页面:

@page "/"

<h1>My favorite pizza is: @favPizza</h1>

<p>
    Enter your favorite pizza:
    <input @bind="favPizza" />
</p>

@code {
    private string favPizza { get; set; } = "Margherita"
}

呈现该页时,默认值 Margherita 将同时显示在<h1>元素和文本框中。 在文本框中输入最喜欢的新披萨时,除非离开文本框或选择 Enter 键,否则<h1> 元素不会发生更改,因为那时才会触发 onchange DOM 事件。

通常,这是你想要的行为。 但是,假设你希望在文本框中输入任何字符时<h1> 元素会立即更新。 可以通过绑定到 oninput DOM 事件来实现这一结果。 若要绑定到此事件,必须使用 @bind-value 和 @bind-value:event 指令:

@page "/"

<h1>My favorite pizza is: @favPizza</h1>

<p>
    Enter your favorite pizza:
    <input @bind-value="favPizza" @bind-value:event="oninput" />
</p>

@code {
    private string favPizza { get; set; } = "Margherita"
}

在此情况下,在文本框中键入任何字符时,标题会立即发生更改。

设置绑定值的格式
如果要向用户显示日期,可能需要使用本地化的数据格式。 例如,假设你要专门为英国用户(在写日期时,他们更喜欢先写日)编写一个页面。 可以使用 @bind:format 指令指定单个日期格式字符串:

@page "/ukbirthdaypizza"

<h1>Order a pizza for your birthday!</h1>

<p>
    Enter your birth date:
    <input @bind="birthdate" @bind:format="dd-MM-yyyy" />
</p>

@code {
    private DateTime birthdate { get; set; } = new(2000, 1, 1);
}

备注

编写时,仅支持日期值格式字符串。 将来可能会添加货币格式、数字格式以及其他格式。 若要查看有关绑定格式的最新信息,请参阅 Blazor 文档中的格式字符串。

可以编写 C# 代码来设置绑定值的格式,作为使用 @bind:format 指令的一种替代方法。 在成员定义中使用 get 和 set 访问器,如以下示例所示:

@page "/pizzaapproval"
@using System.Globalization

<h1>Pizza: @PizzaName</h1>

<p>Approval rating: @approvalRating</p>

<p>
    <label>
        Set a new approval rating:
        <input @bind="ApprovalRating" />
    </label>
</p>

@code {
    private decimal approvalRating = 1.0;
    private NumberStyles style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign;
    private CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
    
    private string ApprovalRating
    {
        get => approvalRating.ToString("0.000", culture);
        set
        {
            if (Decimal.TryParse(value, style, culture, out var number))
            {
                approvalRating = Math.Round(number, 3);
            }
        }
    }
}

练习 - 在 Blazor 应用程序中将控件绑定到数据

当客户修改披萨并将其添加到订单时,Blazing Pizza 应用需要更新界面。 Blazor 使你能够将 HTML 控件绑定到 C# 属性,以便在其值发生更改时进行更新。

客户应看到他们所订购的披萨,以及他们所选的尺寸对他们将支付的价格有什么影响。

在此练习中,你将获得可在其中更新和编辑订单的 Blazing Pizza 应用。 你将了解如何将控件绑定到披萨的属性,并根据这些更改重新计算价格。
显示客户的披萨订单
你将添加一个边栏,用于显示客户已添加到订单的所有披萨。

1.如果应用仍在运行,请停止它。

2.在 Visual Studio Code 的文件资源管理器中,展开“页”,然后选择“Index.razor”。

3.在 @if 和 @code 块之间,添加以下代码:

<div class="sidebar">
    @if (order.Pizzas.Any())
    {
        <div class="order-contents">
            <h2>Your order</h2>

            @foreach (var configuredPizza in order.Pizzas)
            {
              <div class="cart-item">
                  <div class="title">@(configuredPizza.Size)" @configuredPizza.Special.Name</div>
                  <div class="item-price">
                      @configuredPizza.GetFormattedTotalPrice()
                  </div>
              </div>
            }
        </div>
    }
    else
    {
        <div class="empty-cart">Choose a pizza<br>to get started</div>
    }

    <div class="order-total @(order.Pizzas.Any() ? "" : "hidden")">
        Total:
        <span class="total-price">@order.GetFormattedTotalPrice()</span>
        <a href="checkout" class="@(OrderState.Order.Pizzas.Count == 0 ? "btn btn-warning disabled" : "btn btn-warning")">
            Order >
        </a>
    </div>
</div>

此 HTML 会将边栏添加到页面。 如果 OrderState.Order 中有任何披萨,会显示出来。 如果没有订单,则会提示客户添加一些订单。

你将看到一些错误,因为组件不知道有哪些订单。

4.在 @code 块的 List specials = new(); 下,添加以下代码:

Order order => OrderState.Order;

5.选择 F5 或“运行”。 然后选择“开始调试”。
在这里插入图片描述
尝试订购一些披萨,并取消一些订购。 你将看到它们已被添加到购物车,并且订单总计也进行了更新。

6.按 Shift+F5,或选择“停止调试”。
从客户订单中删除披萨
你可能已经注意到,无法从客户的购物车中删除已配置的披萨。 让我们添加此功能。

第一步是更新 OrderState 服务,以便它能够提供从订单中删除披萨的方法。

1.在文件资源管理器中,选择“Services/OrderState.cs”。

2.在类的底部,添加以下方法:

public void RemoveConfiguredPizza(Pizza pizza)
{
    Order.Pizzas.Remove(pizza);
}

3.在文件资源管理器中,展开“页面”,然后选择“Index.razor”。

4.在

中,在结束
之前添加 标记以创建移除按钮:

<a @onclick="@(() => OrderState.RemoveConfiguredPizza(configuredPizza))" class="delete-item">x</a>

此标记会向订单边栏中的每个披萨添加一个 X。 如果选择此选项,它将在 OrderState 服务中调用 RemoveConfiguredPizza 方法。
5.选择 F5 或“运行”。 然后选择“开始调试”。
在这里插入图片描述

动态配置披萨大小
更改大小滑块时,披萨配置对话框不会更新。 该组件需要一种方法来更新披萨及其尺寸,并重新计算价格。

1.在文件资源管理器中,展开“共享”,然后选择“ConfigurePizzaDialog.razor”。

2.向 input HTML 控件添加代码以将其值绑定到披萨尺寸:

<input type="range" min="@Pizza.MinimumSize" max="@Pizza.MaximumSize" step="1" @bind="Pizza.Size"/>

3.选择 F5 或“运行”。 然后选择“开始调试”。

使用更新的对话框向订单中添加一些不同大小的披萨。 单击滚动条,而不是拖动它。 注意松开控件上的鼠标时披萨大小会更新。

如果拖动滑块,则在释放鼠标之前,尺寸不会发生更改。 现在来解决此问题。

4.按 Shift+F5,或选择“停止调试”。

5.添加控件应绑定到的事件:

<input type="range" min="@Pizza.MinimumSize" max="@Pizza.MaximumSize" step="1" @bind="Pizza.Size" @bind:event="oninput" />

6.选择 F5 或“运行”。 然后选择“开始调试”。
在这里插入图片描述
添加 @bind=“Pizza.Size” 代码是如何提供如此多的功能的? 如果检查整个 ConfigurePizzaDialog.razor 代码,你将看到团队已将其他元素连接到披萨的属性。

例如,以下代码会导致价格更新:

Price: <span class="price">@(Pizza.GetFormattedTotalPrice())</span>

由于披萨 GetFormattedTotalPrice() 上的方法使用披萨大小计算总价,因此价格会随着披萨大小的更改而更新。

你在 Blazing Pizza 应用上的工作取得了进展。 如果想要继续改进,请完成此学习路径中的下一个模块。

摘要

你就职于一家披萨派送公司,该公司需要一个新网站,而你的团队在 C# 方面拥有多年的经验。 通过选择 Blazor,你可以使用 C# 编写客户端代码和服务器端代码,并最大程度地减少使用 JavaScript 代码。

在使用 Blazor 之前,你必须就 JavaScript 和其他 Web 技术对开发人员进行培训。 使用 Blazor 就不需要这类培训。 Blazor 可以帮助加速 Web 应用程序开发项目。

学习完本模块后,你已了解如何:

通过创建 Blazor 组件来汇编 Web 应用的用户界面。
访问要在 Web 应用中显示的数据。
在多个 Blazor 组件之间共享 Web 应用中的数据。
将 HTML 元素绑定到 Blazor 组件中的变量。

Blazor(用于构建交互式 Web UI) Blazor 是微软推出的一个用于使用.NET 生成交互式客户端 Web UI 的框架。它于 2023 年至 2024 年间在技术领域持续受到关注和发展。Blazor 允许开发人员使用 C#代替 JavaScript 来创建丰富的交互式 UI,并且可以共享使用.NET 编写的服务器端和客户端应用逻辑。将 UI 呈现为 HTML 和 CSS,支持众多浏览器,包括移动浏览器。 阅读详情

相关推荐

mbill_wechat_app:基于uni-app构建个人记账微信小程序,采用.NET 5构建后台服务,采用Blazor搭建后台管理,采用Xamarin构建移动客户端App

个人记账小程序 知行合一 项目介绍 项目为个人记账微信小程序端实现。 【基于WePY 2.x项目在分支中可见】 参考设计: 相关项目 :sparkles: :sparkles: :sparkles: 去做 建造基本界面 实现接口调用 实现天气推进 实现统计效果显示 优化界面设计 ...... 效果演示 时间线 2021-01-25:突然发现自己用的是wepy1.6版本,目前正在突突上2.x 2021-01-31:基本完成WePY 2.x的升级,剩下对基于ECharts的报表实现。 2021-02-01 2021-02-01:完成对ECharts的集成,踩了一天的坑,主要是没有完整的教程,走了很多弯路,导致半天造成无用功。很诡异。有空写一下详细教程吧,目前的为weixin ECharts很容易集成的。 2021-02-02 2021-02-02:莫名其妙破案,明天整理一下教程! 2021-03-01:打算转战uni-ap

【使用Blazor构建web应用程序 .NET 6篇 上】

Build web applications with Blazor 使用Blazor构建web应用程序 .NET 6.0篇(上)使用Blazor构建web应用程序第一节Introduction (介绍)第二节 Create a user interface with Blazor components(使用Blazor组件创建一个用户界面) 使用Blazor构建web应用程序 .NET 6.0篇(上)) 使用Blazor构建web应用程序 Build wed applications with Blazo

BlazorComponent的博客 4294

blazor-desktop-crossplatform-sample:使用.NET 6 Blazor Desktop实施的真正跨平台Web和桌面Blazor应用程序的真正早期被黑客入侵的例子

跨平台Blazor Desktop示例 这个被黑客入侵的示例展示了一个Blazor桌面(使用.NET 6中提供的官方API)应用程序,该应用程序既可以在Web浏览器中运行,也可以在官方WinForms包装的早期版本中运行。 本文以默认的Blazor服务器模板为例,该模板比.NET 6 Preview 2公告中的模板更漂亮。 要运行它, /BlazorDesktopTest/BlazorDesktopTest.sln在Visual Studio 16.9中打开/BlazorDesktopTest/BlazorDesktopTest.sln ,并安装.NET 6 Preview 2 SDK,并打开“启用预览.NET SDK”。 然后,您可以F5 BlazorDesktopTest和BlazorWinFormsApp项目。 此代码包含来自aspnetcore主存储库的大量内容,主要是因为尚未

开源项目【后台管理系统】Blazor + Ant Design + .NET6

Caviar Blazor介绍Caviar(鱼子酱)框架采用了:Blazor + Ant Design + .NET6 本框架使用简洁架构,简单大方现代,包含了后台管理基础功能,在开发上为了方便,封装了很多Ant Design组件,包含了自动列表、高级搜索、自动化菜单、布局等。在代码生成上做到了100%的代码隔离,有修改,重新代码生成,不会对开发者有任何影响,并且不会降低开发的灵活性。在权限设计上...

dotNET跨平台 2106

基于 .net 6、blazor 、furion 开发的后台管理系统源码.zip

基于 .net 6、blazor 、furion 开发的后台管理系统,技术够新、开发够快,快来试试吧。

BootstrapBlazorUI框架 v5.0.6

为您提供BootstrapBlazorUI框架下载,Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架:1、使用 C# 代替 JavaScript 来创建丰富的交互式 UI。2、共享使用 .NET 编写的服务器端和客户端应用逻辑。3、将 UI 呈现为 HTML 和 CSS,以支持众多浏览器,其中包括移动浏览器。使用 .NET 进行客户端 Web 开发可提供以下优势:1、使用 C# 代替 JavaScript 来编写代码。2、

ASP.NET Core 6.0 Blazor Server APP并使用MySQL数据库

在本文中,我们将了解如何在MySQL中创建存储过程,以使用带有搜索参数的服务在Blazor应用程序中搜索和绑定客户详细信息。

寒冰屋的专栏 4259

别再死记硬背了!用一张时序图彻底搞懂Setup和Hold检查的本质

本文深入解析数字IC设计中的Setup和Hold时序检查原理,通过波形图直观展示数据在触发器间的传递过程。详细讲解Setup检查为何关注前一周期的数据,Hold检查为何关注同一周期的数据,并提供实际设计中的考量因素和修复策略,帮助工程师彻底理解时序检查的本质。

weixin_29927965的博客 364

【使用Blazor构建web应用程序 .NET 6篇 中】

Build web applications with Blazor 使用Blazor构建web应用程序 .NET 6篇 中使用Blazor构建web应用程序第五节Introduction (介绍) 使用Blazor构建web应用程序 .NET 6篇 中) 使用Blazor构建web应用程序 Build wed applications with Blazor微软学习文档尚未更新中文,为方便小伙伴们共同学习,博主翻译了教程,并修改了原文中个别代码错误,以下教程翻译属个人行为,如有侵权,请联系博主Blazor

BlazorComponent的博客 1491

SurfaceControlViewHost使用介绍

可以看到,主要用途:是把一个进程的View显示到另外一个进程里面。

chadm.xiang 1285

CTFShow萌新区全攻略:从密码破解到Web渗透的实战解析

本文为CTFShow萌新区新手提供从密码破解到Web渗透的完整实战攻略。文章深入解析了密码学、隐写术、杂项和Web安全四大核心方向,分享了实用的解题工具、思维方法和绕过技巧,旨在帮助初学者建立系统的安全竞赛解题体系,而不仅仅是提供一份题解(WP)。

weixin_29216957的博客 299

使用 Blazor 和 Elasticsearch 构建搜索应用程序

了解如何使用 Blazor 和 Elasticsearch 构建搜索应用程序,以及如何使用 Elasticsearch .NET 客户端进行混合搜索。 在本文中,你将学习如何利用 C# 技能使用 Blazor 和 Elasticsearch 构建搜索应用程序。我们将使用 Elasticsearch .NET 客户端运行全文、语义和混合搜索查询。 注意如果你熟悉旧版本的 Elasticsearch C# 客户端 NEST,请阅读这篇关于 NEST 客户端弃用和新功能的博客文章。NEST 是上一代 .N

Elastic 中国社区官方博客 2043

C# emgu.cv图像识别 从大图中寻找小图,判断存在图的相似度

这是2个问题,我采用emgu.cv来解决这个识别问题,这里需要在nuget中引用emgu。最近写了一个在一张图片中,截取一部分,通过机器判断截取图片是这张图片的。第一、通过小图去找判断是否存在大图中,第二、小图存在大图的什么位置。

一个专注于技术研究创新的程序员 2467

您需要在Blazor应用程序上了解的所有知识,并使用VS 2019,.NET Core 3和Web API创建ASP.NET Core Blazor CRUD应用程序

Download shanuBlazorCRUD.zip - 435.9 KB 下载shanuBlazorCRUD.zip-435.9 KB 介绍 (Introduction) In this article, we will see how to create a simple CRUD application for ASP.NET Core Blazor using Visual Stud...

cunhan4654的博客 1926

学习利用ce修改游戏生命参数

易语言代码 游戏的简陋界面 用ce查找存储这个1000即生命值的内存地址(得先附加到目标程序上,点击左上角那个电脑按钮) 看到有很多值为1000的,但哪个是生命值呢?真相只有一个 我们点击一下打我这个按钮,看下面的ce界面上地址为004A65C0处的值变了,所以这个就是我们要找的生命值 接下来我们对生命值进行修改,修改为99

zsd747289639的博客 5万+

自动驾驶系统研发系列—全智能驾驶新高度:深入解析车道保持辅助(ELK)功能

车道保持辅助系统(ELK)是一种基于先进视觉感知技术的主动安全系统,能够通过车载摄像头实时监测道路上的车道线、道路边缘以及周围车辆的位置。这一功能的核心在于为驾驶员提供智能化的安全辅助,尤其是在驾驶员可能因疲劳、分心或其他原因无意识地偏离车道时,系统能够主动干预,从而避免危险发生。ELK系统不仅仅依靠摄像头对道路进行感知,还结合其他传感器的数据(如雷达),实时评估自车与车道线、周边车辆的相对位置。当系统检测到车辆即将偏离车道,或越过道路边缘时,ELK会通过控制电子助力转向系统(EPS)

u013889591的专栏 1211

使用VS 2019,.NET Core 3和Web API创建ASP.NET Core Blazor CRUD应用程序

目录 介绍 Blazor Blazor客户端应用程序 Blazor服务器应用程序 背景 先决条件 使用代码 第1步-创建数据库和表 第2步-创建ASP.NET Core Blazor服务器应用程序 运行以测试应用程序 调试组件 步骤3-使用实体框架 安装软件包 添加数据库连接字符串 创建模型类 创建dbConext类 在Startup中添加DbContext 创...

寒冰屋的专栏 5257

VMware ESXi 直通GPU

虚拟机需要独享GPU资源,那么就需要用到DirectPath I/O (直通),ESXi hypervisor 把 GPU 设备直接映射成虚机中的 GPU 设备,供应用使用。注意,内存注意一定要勾选预留,否则开机后报错如下:无法打开虚拟机 win10 的电源。1.ESXi主机,管理,硬件,PCI设备,勾选GPU卡,切换直通,会提示要求重启主机,重启主机之后,该GPU设备直通一栏显示为“活动”。先确认虚拟机是否EFI引导:编辑虚拟机 - 虚拟机选项 - 引导选项 - 固件 - EFI。

liwension的博客 6293

精选 5 款开源、免费、美观的 .NET Blazor UI 组件库

今天大姚给大家分享 5 款开源、免费、美观的 .NET Blazor UI 组件库,希望可以帮助到有需要的小伙伴(注意:以下排名不分先后,都是十分优秀的 Blazor UI 组件库)。

专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享。这里聚焦了大量的C#/.NET/.NET Core优质文章、开源项目、实用工具和学习、工作、面试心得。 1413

泰凌微8258入门教程 基础篇①——Bluetooth® SIG Mesh 快速上手

Bluetooth® SIG Mesh Quick Start

6730

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

使用Entity Framework和Web API的ASP.NET Core Blazor CRUD

目录 介绍 背景 先决条件 使用代码 第1步——创建数据库和表 第2步——创建ASP.NET Core Blazor应用程序 ASP.NET Core Blazor解决方案的新增功能是什么? 客户端项目 服务端项目 共享项目 运行以测试应用程序 使用实体框架 安装包 为CRUD操作创建Web API 使用客户端项目 添加Razor视图 导入部分 HTML设计和数...

寒冰屋的专栏 2527

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

使用AntBlazor组件库快速构建Blazor应用

AntBlazor是一个基于Ant Design的Blazor组件库,提供了一系列优雅且功能强大的组件,适合用于构建现代化的Web应用。为了帮助你快速上手,本文将参照AntBlazor官网的示例,展示如何在Blazor项目中使用AntBlazor组件库。

码事漫谈 1931

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

在IIS上部署ASP.NET Core Web API和Blazor Wasm详细教程

前段时间我们完成了七天.NET 8 操作 SQLite 入门到实战的开发系列教程,有不少同学留言问如何将项目发布部署到IIS上面运行。本篇文章我们就一起来讲讲在IIS上部署ASP.NET Core Web API和Blazor Wasm。

专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享。这里聚焦了大量的C#/.NET/.NET Core优质文章、开源项目、实用工具和学习、工作、面试心得。 3492

ASP.NET Web UI 框架 Razor Pages/MVC/Web API/Blazor

🎯ASP.NET Web应用中的 Razor Pages/MVC/Web API/Blazor 的区别,如何选择web应用开发框架。

李赛赛的专栏 2327

Blazor 概述

Blazor Server 借助 Asp.Net 核心 API 的功能在服务器上执行,并使用 SingalR 更新客户端,而 Blazor WebAssembly 借助 SPA 和 PWA 的功能在浏览器中执行。

技术探索驿站 1590

Blazor VS 传统Web应用程序

原文作者: Christian Findlay原文链接:https://christianfindlay.com/2020/07/09/blazor-vs-traditional-web...

dotNET跨平台 991
上一篇: C#事件详解
下一篇: C#中使用枚举值来存储离散选项的组合
BlazorComponent
博客等级 码龄5年 384粉丝 14原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BlazorComponent

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值