当前位置: 首页 > news >正文

几十行代码搞定CRUD:建好实体和菜单,页面自动生成

前面两篇我们讲了怎么3分钟搭一个Blazor后台,以及项目的目录结构。今天讲点更爽的——怎么在写少量代码或不写代码的情况下,把一个新模块的后台页面搞出来。


一、传统方式:写一个模块要多久?

假设你要加一个「产品管理」模块,传统开发流程:

  1. 建数据库表(写SQL)
  2. 写实体类(映射字段)
  3. 写Repository(数据访问)
  4. 写Service(业务逻辑)
  5. 写Controller(API接口)
  6. 写DTO(数据传输对象)
  7. 写前端页面(表格、表单、弹窗)
  8. 写前端API调用(axios、fetch)
  9. 联调、改bug

一套下来,半天过去了。

如果用EasyAdminBlazor呢?


二、EasyAdminBlazor方式:四步搞定

第1步:创建实体类 这一步也可以交给AI生成

Entities/文件夹下新建一个类,继承EntityFull

using EasyAdminBlazor.Attributes;
using FreeSql.DataAnnotations;namespace EasyAdminBlazorDemo.Entities
{/// <summary>/// 产品实体/// </summary>[AutoGenerateClass(Filterable = true)]  // 详细注解可参考:https://www.blazor.zone/table/attribute[Table(Name = "product")]public class Product : EntityFull{/// <summary>/// 产品名称/// </summary>[Column(StringLength = 100)]public string Name { get; set; } = string.Empty;/// <summary>/// 产品价格/// </summary>[Column(Precision = 10, Scale = 2)]public decimal Price { get; set; }/// <summary>/// 产品描述/// </summary>[Column(StringLength = 500)]public string Description { get; set; } = string.Empty;/// <summary>/// 是否上架/// </summary>public bool IsActive { get; set; } = true;/// <summary>/// 排序/// </summary>public int SortCode { get; set; } = 99;}
}

这就完了? 对,数据库表都不用你建,FreeSql会自动同步。

第2步:添加菜单

运行项目,进入后台

找到「系统管理」→「菜单管理」

点击「添加菜单」

填写:

  • 菜单名称:产品管理
  • 菜单类型:选择「增删改查」

点击保存

第3步:一键生成页面

在菜单列表里找到刚加的「产品管理」

点击该行右侧的「配置」按钮

在弹出的窗口里,选择刚才创建的Product实体类

点击「生成 Blazor 代码」

系统会自动在 Components/Admin/ 目录下生成 Product.razor 文件,页面代码已经有了。

第4步:刷新页面

刷新后台,左侧菜单会出现「产品管理」,点进去,一个完整的 CRUD 页面就在眼前了。


三、生成的页面长什么样?

生成的 Product.razor 文件内容大概是这样的:

@page "/Admin/Product"
@attribute [TabItemOption(Text = "产品管理")]<AdminTable TItem="Product" TKey="long"ShowAdvancedSearch="true"ShowImportButton="false" ShowExportButton="true" ShowExtendButtons="true"IsPagination="true" ShowSearch="true" IsMultipleSelect="true"><TableColumns><TableColumn @bind-Field="context.Name" Text="产品名称" Filterable="true" Searchable="true" /><TableColumn @bind-Field="context.Price" Text="价格" /><TableColumn @bind-Field="context.Description" Text="描述" /><TableColumn @bind-Field="context.IsActive" Text="是否上架" /><TableColumn @bind-Field="context.SortCode" Text="排序" /><TableColumn @bind-Field="context.CreatedTime" Text="创建时间" /></TableColumns></AdminTable>

你一行代码都没写,增删改查、分页、排序、筛选、导入、导出,全有了。


四、如果要自定义列怎么办?

两种方式:

方式一:用 [AutoGenerateClass] 注解自动生成

直接在实体类上加 [AutoGenerateClass(Filterable = true)],页面里可以什么都不写:

<AdminTable TItem="Product" TKey="long"ShowImportButton="true"ShowExportButton="true"><!-- 不需要写TableColumn,会自动根据实体属性生成 -->
</AdminTable>

方式二:手动控制列

如果你只想显示部分列,或者自定义列的显示方式,就在 <TableColumns> 里写:

<TableColumns><TableColumn @bind-Field="context.Name" Text="产品名称" /><TableColumn @bind-Field="context.Price" Text="价格"><Template>¥@context.Price.ToString("0.00")</Template></TableColumn><!-- 不想显示的列就不写 -->
</TableColumns>

两种方式混着用也行,灵活性很高。


五、功能清单

一个 AdminTable 组件,自带以下功能:

功能 说明 启用方式
增删改查 自动 默认启用
分页 自动 默认启用
排序 点击表头 默认启用
搜索 全局搜索 ShowSearch="true"
筛选 列筛选 Filterable="true"
导入Excel 批量导入 ShowImportButton="true"
导出Excel 导出当前数据 ShowExportButton="true"
多选 批量操作 IsMultipleSelect="true"

六、效果对比

开发方式 代码量 耗时 需要写API?
传统前后端分离 几百行 半天 ✅ 需要
EasyAdminBlazor 0行 3分钟 ❌ 不需要

你没看错,0行代码,3分钟,一个完整的产品管理模块就上线了。


七、注意事项

  • 实体类须继承 EntityFull:它已经包含了 IdCreatedTimeUpdatedTime 等通用字段
  • [AutoGenerateClass] 注解是可选的:加了这个注解,页面里可以不用写 TableColumn
  • 导入文件大小限制5MB:默认限制,可以在配置里调整
  • 权限自动控制:按钮的显示/隐藏会根据用户的权限自动处理

下一篇预告

《博客后台实战:用AdminBlazor管理文章和专栏》

实体关联怎么做?列表显示关联表的名称怎么配置?筛选器怎么变成下拉框?下一篇统统告诉你。


🔗 文档:https://easyadmim.wang-zhan.com.cn/doc
🔗 源码:https://gitee.com/gudufy/EasyAdminBlazor


EasyAdminBlazor —— 我自己接单的屠龙刀,现在也给你用。

http://www.jsqmd.com/news/903046/

相关文章:

  • AI搜索问题求解:从状态空间到A*与博弈搜索的实践指南
  • 图形化编程实现Arduino频率扫描信号发生器
  • 重庆黄金上门回收怎么选?福运来黄金回收免费上门透明公道 - 黄金回收
  • 2026株洲市天元区黄金奢侈品回收/抵押门店实力排行榜及联系方式推荐 - 生活测评小能手
  • 惠普tank 1020,开机提示错误代码 er-08 ,加了粉还是报错er08,黄灯闪烁成像鼓接近寿命期限报错,怎么办?
  • 半导体/军工/科研各用什么锁相放大器?国产厂家按场景精准推荐 - 深度智识库
  • 从《原神》小地图到《双人成行》分屏:手把手拆解Unity多相机实战应用
  • 【独家首发】Gemini多模态输入支持的14种文件类型兼容矩阵(含MIME类型、最大尺寸、OCR预处理要求等11项硬指标)
  • 2026年q2四川干式真空泵权威厂家排行解析:绵阳移动式空压机/绵阳空压机/绵阳空压机价格/实力盘点 - 优质品牌商家
  • 2026年全国仓储钢平台货架top榜:主打个性化定制与长效售后保障服务 - 深度智识库
  • 2026年多场景重型货架厂家top5:聚焦各行业个性化仓储设备适配需求 - 深度智识库
  • 告别命令行恐惧!用SourceTree可视化搞定Git日常操作(附中文版设置)
  • 2026上海废铝回收服务商评测:上海废铝废铝回收/上海金属回收/上海废铁回收/合规与性价比双维度对比 - 优质品牌商家
  • 2026年硬核亲测:10款降AIGC工具深度横评(附对比表) - 降AI小能手
  • Nvidia发布企业级AI代理部署栈
  • 超燃冲压发动机内流场实验技术应用优化【附数据】
  • 如何免费解锁加密音乐文件:Unlock-Music终极使用指南
  • 从GitHub到ArcMap工具箱:一次搞懂ArcGIS Editor for OSM插件的完整配置流程
  • Gemini白皮书撰写最后窗口期:仅剩67天适配新版Google AI Principles 3.1——你的技术声明是否已通过Bias-Audit 2.0压力测试?
  • 2026 年正规 MBTI 测试网站推荐 TOP8 中文正版无广告平台实测 - 资讯速览
  • 福州高价回收爱马仕香奈儿 LV 添价收当场结算秒到账 - 薛定谔的梨花猫
  • 为什么你的ChatGPT汇报总缺“决策穿透力”?:20年战略咨询专家首曝“金字塔-因果链-证据锚”三维强化模型
  • 5分钟搭建专业级电商系统:新蜂商城实战指南
  • 从《视觉SLAM十四讲》出发,一文读懂拓扑地图与语义地图的现在与未来
  • 2026年黄山地区工业氧气供应品牌排行及选型指南:杭州工业气体、杭州工业氧气、杭州氧气、湖州丙烷、湖州二氧化碳选择指南 - 优质品牌商家
  • STM32 USB开发中ARM_DRIVER_ERROR_PARAMETER错误解析与FIFO配置优化
  • 镇江黄金上门回收哪家强,福运来黄金回收稳居口碑榜首 - 黄金回收
  • 产品经理开需求评审会熬秃头?2026年5款总结视频内容的ai工具,10分钟出完整会议纪要
  • 通过Taotoken用量看板直观比较不同模型在相同任务下的token消耗
  • 大连翡翠回收怎么选?2026 年 5 月五大平台实测,帮你远离套路 - 奢侈品回收测评