全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Blazor 怎么使用 IndexedDB

Blazor 通过 JavaScript 互操作调用 IndexedDB,需在 JS 中封装 initDb、add、get 等方法并返回 Promise,C# 端用 IndexedDbService 封装调用,注意版本升级、事务短暂、错误监听及存储限制。

Blazor 本身不直接提供 IndexedDB API,但可以通过 JavaScript 互操作(JS Interop)在 Blazor WebAssembly 或 Blazor Server(需启用 JS 支持)中调用浏览器原生的 IndexedDB。核心思路是:C# 调用 JS 封装好的数据库操作函数,由 JS 层完成打开数据库、建表、事务、增删改查等全部逻辑。

准备基础 JS 封装

wwwroot/js/indexedDb.js 中写一个轻量封装,暴露清晰的方法接口:

  • initDb(name, version):初始化或升级数据库,自动创建 objectStore 和索引
  • add(storeName, data, key):向指定 store 添加数据
  • get(storeName, key):按主键查询单条
  • getAll(storeName):获取全部记录
  • delete(storeName, key):删除单条
  • searchByIndex(storeName, indexName, value):按索引快速查找

注意:所有方法都返回 Promise,确保与 C# 的 await 兼容。

在 Blazor 中注入并调用

创建一个 C# 服务类统一管理 JS 引用:

public class IndexedDbService
{
    private readonly IJSRuntime _jsRuntime;
    private IJSObjectReference _module;
public IndexedDbService(IJSRuntime jsRuntime) => _jsRuntime = jsRuntime;

public async Task InitializeAsync() =>
    _module = await _jsRuntime.InvokeAsync(
        "import", "./js/indexedDb.js");

public async Task AddAsync(string storeName, object data, object key = null) =>
    await _module.InvokeVoidAsync("add", storeName, data, key);

public async Task GetAsync(string storeName, object key) =>
    await _module.InvokeAsync("get", storeName, key);

public async Task GetAllAsync(string storeName) =>
    await _module.InvokeAsync("getAll", storeName);

}

Program.cs 中注册为 scoped 服务:
builder.Services.AddScoped();

组件中使用:

@inject IndexedDbService Db

@code { private async Task SaveUser() { await Db.InitializeAsync(); await Db.AddAsync("users", new { id = 1, name = "Alice", email = "a@example.com" }); }

private async Task LoadUsers()
{
    var users = await Db.GetAllAsync("users");
    foreach (var u in users)
        Console.WriteLine(u.name);
}

}

关键注意事项

IndexedDB 在 Blazor 中不是“开箱即用”,容易踩坑:

  • 版本升级必须显式触发:修改 objectStore 结构(如加字段、建新索引)时,要提高数据库版本号,并在 onupgradeneeded 中重建 schema
  • 事务生命周期极短:JS 层每次操作都要新开事务,不能跨 await 持有 transaction 对象
  • 二进制数据支持好:可直接存 BlobArrayBuffer(比如图片),但 .NET 端传入需转为 base64 或 byte[] 后再交由 JS 处理
  • 错误必须监听:JS 层每个 request 都要绑定 onerror,否则失败静默,C# 端收不到异常
  • 存储上限因浏览器而异:Chrome 通常允许数百 MB,Safari 较保守(约 50–100MB),大文件建议分块或配合 Service Worker 缓存

替代方案参考

如果只是存用户设置、token、小对象,localStorage 更简单高效;若需离线同步、多条件查询、大量结构化数据(如待办列表+附件+标签+时间范围筛选),IndexedDB 是唯一合理选择。也可组合使用:用 localStorage 存访问令牌,用 IndexedDB 存业务数据。

基本上就这些。


# javascript  # java  # js  # 浏览器  # safari  # ai  # c#  # .net 


相关文章: 建站之星在线版空间:自助建站+智能模板一键生成方案  如何在阿里云通过域名搭建网站?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何快速搭建自助建站会员专属系统?  建站之星安装模板失败:服务器环境不兼容?  如何在云服务器上快速搭建个人网站?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  高性能网站服务器部署指南:稳定运行与安全配置优化方案  盐城做公司网站,江苏电子版退休证办理流程?  如何通过商城自助建站源码实现零基础高效建站?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  如何快速生成凡客建站的专业级图册?  PHP 500报错的快速解决方法  官网建站费用明细查询_企业建站套餐价格及收费标准指南  Swift中swift中的switch 语句  如何在VPS电脑上快速搭建网站?  南京网站制作费用,南京远驱官方网站?  简单实现Android验证码  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  音响网站制作视频教程,隆霸音响官方网站?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  昆明网站制作哪家好,昆明公租房申请网上登录入口?  制作网站的软件免费下载,免费制作app哪个平台好?  建站主机服务器选购指南:轻量应用与VPS配置解析  网站app免费制作软件,能免费看各大网站视频的手机app?  济南网站制作的价格,历城一职专官方网站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  建站之星会员如何解锁更多建站功能?  常州企业网站制作公司,全国继续教育网怎么登录?  如何通过虚拟主机空间快速建站?  如何快速搭建高效WAP手机网站?  如何快速生成ASP一键建站模板并优化安全性?  网站制作软件有哪些,制图软件有哪些?  如何高效完成独享虚拟主机建站?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  制作网站的基本流程,设计网站的软件是什么?  建站主机功能解析:服务器选择与快速搭建指南  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  如何快速登录WAP自助建站平台?  如何在腾讯云服务器上快速搭建个人网站?  制作网站怎么制作,*游戏网站怎么搭建? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。