Blazor 怎么实现 CRUD 操作

来源:这里教程网 时间:2026-02-21 17:35:55 作者:

Blazor 实现 CRUD(创建、读取、更新、删除)操作,核心是把前端组件与后端 API 或本地数据源联动起来,用 C# 逻辑驱动 UI 变化。关键不在“能不能”,而在于“怎么组织更清晰、可维护”——尤其是状态管理、异步处理和错误反馈这三块容易踩坑。

用 HttpClient 调用 REST API(服务端渲染或 WebAssembly 都适用)

这是最常见也最贴近真实项目的做法。Blazor 组件不直接操作数据库,而是通过 HttpClient 请求 ASP.NET Core Web API(或其他后端)完成数据操作。

Program.cs
Startup.cs
中注册 HttpClient(推荐命名客户端,比如
ApiHttpClient
定义一个 C# 模型类(如
Product.cs
),和 API 返回结构一致
封装一个服务类(如
ProductService.cs
),集中写
GetAll()
Create(product)
Update(id, product)
Delete(id)
方法,全部返回
Task<t></t>
在 Razor 组件中注入该服务,用
@bind
绑定表单字段,用
@onsubmit
触发保存,用
await
调用方法并刷新列表

用 EditForm + Model 验证实现安全的表单提交

Blazor 内置的 EditForm 不只是美化表单,它能自动绑定模型、触发验证、控制提交状态,避免手动取值拼对象。

给表单模型加上数据注解(如
[Required]
[Range(1,100)]
在组件中用
<editform model="@product" onvalidsubmit="@HandleValidSubmit"></editform>
HandleValidSubmit
方法里调用服务的保存逻辑,完成后重置表单或跳转
配合
<validationsummary></validationsummary>
<validationmessage for="@(() => product.Name)"></validationmessage>
显示错误

本地模拟 CRUD(适合快速原型或学习)

不想搭后端?可以用静态 List 或内存数据库(如

MemoryCache
或第三方库
LiteDB
)模拟数据源,逻辑一样,只是把 HTTP 调用换成 C# 对象操作。

在服务类中用
static List<product> _products = new()</product>
存数据
Create
就是
_products.Add(newProduct)
Update
Find(x => x.Id == id).Name = newProduct.Name
注意:多用户并发时内存列表不安全,仅限单机演示 想更进一步?用
ObservableCollection<t></t>
替代 List,让 UI 自动响应集合变化(需手动触发通知)

状态同步与用户体验细节

CRUD 完了不等于结束。用户需要知道“正在提交”、“成功了”、“失败了”,否则会狂点按钮。

用布尔变量(如
isSubmitting
)控制按钮禁用和加载动画:
<button disabled>@if (isSubmitting) { <span>保存中...</span> } else { <span>保存</span> }</button>
操作完成后,用
NavigationManager.NavigateTo
跳转到详情页,或用
StateHasChanged()
刷新列表(尤其在非事件回调里修改状态时)
捕获异常(
try/catch
),把
ex.Message
或 API 的详细错误(如 400 返回的 validation errors)显示在页面顶部或字段旁

基本上就这些。Blazor 的 CRUD 不复杂,但容易忽略状态生命周期和异步边界。把数据逻辑抽成服务、表单交给 EditForm、错误和加载态显式处理,代码就稳了。

相关推荐