小试Blazor——实现Ant Design Blazor动态表单
2023-06-25 09:06:42 来源:博客园
前言
(相关资料图)
最近想了解下Blazor,于是尝试使用Blazor写一个简单的低代码框架,于是就采用了Ant Design Blazor作为组件库
低代码框架在表现层的第一步则是动态表单,需要将设计时的结构渲染成运行时的表单,本次主要实现动态表单,相关数据接口都以返回固定数据的形式实现
实现
1.项目准备
先通过命令创建一个Ant Design Blazor项目,并加入到空的解决方案当中:
dotnet new antdesign -o LowCode.Web -ho server
由于我们需要写一些API接口,所以在Startup类中加入控制器相关的代码:
public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddControllers();//添加控制器 services.AddEndpointsApiExplorer(); services.AddServerSideBlazor(); services.AddAntDesign(); services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(sp.GetService().BaseUri) }); services.Configure (Configuration.GetSection("ProSettings")); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); endpoints.MapControllers();//配置控制器 }); }
2.菜单接口
在项目中新增Services文件夹,添加MenuServices类并填入固定数据,并在Startup类中注册:
public class MenuService { ////// 获取左侧导航数据 /// ///public virtual MenuDataItem[] GetMenuData() { return new MenuDataItem[] { new MenuDataItem { Path="/", Name="测试模块", Key="Test", Icon="smile", Children=new MenuDataItem[] { new MenuDataItem { Path="/StdForm", Name="动态表单", Key="Form", Icon="plus-square" } } } }; } }
修改BaseicLayout.razor中@code部分,将_menuData改为从MenuService中获取:
private MenuDataItem[] _menuData ; [Inject] public MenuService MenuService { get; set; } protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); _menuData = MenuService.GetMenuData(); }
3.表单组件接口
创建一个简单的表单与组件的Model:
录入控件Input:
public class Input { public string Name { get; set; } public string Value { get; set; } }
标准表单StandardFormModel:
public class StandardFormModel { public StandardFormModel() { ArrayInput = new List(); } public List ArrayInput { get; set; } }
表单API接口FormController:
[Route("api/[controller]/[action]")] [ApiController] public class FormController : ControllerBase { [HttpGet] public StandardFormModel GetFormStruc() { var result = new StandardFormModel(); result.ArrayInput.AddRange(new List(){ new Input() { Name="账号" }, new Input() { Name="密码" } }); return result; } }
4.动态表单页面
在Pages文件夹下创建一个StdForm.razor和StdForm.razor.cs文件
StdForm.razor.cs(注意partial):
public partial class StdForm { public StandardFormModel StandardFormModel { get; set; } public FormStdFormModel { get; set; } [Inject] public HttpClient HttpClient { get; set; } public void Init() { var formStruc = HttpClient.GetFromJsonAsync ("api/Form/GetFormStruc").Result; StandardFormModel= formStruc; } protected override async Task OnInitializedAsync() { Init(); await base.OnInitializedAsync(); } }
StdForm.razor:
@page "/StdForm"
运行效果
总结
在Blazor项目中要访问API接口则需要注入HttpClient类,使用HttpClient请求API接口即可,也可以直接注入Services调用。
目前仅仅是验证了动态表单的可能性,其他的组件渲染可以根据Ant Design Blazor官方文档定义模型结构实现
参考文档:
Blazor官方文档
Ant Design Blazor官方文档
Ant Design Blazor仓库
关键词:
[责任编辑:]
相关阅读
- (2023-06-25)小试Blazor——实现Ant Design Blazor动态表单
- (2023-06-25)蛔虫卵减肥(蛔虫卵减肥真相)
- (2023-06-25)奥迪A6L PHEV,表现如何?
- (2023-06-25)普里戈任接受白俄缓和局势建议 其刑事立案将获撤销
- (2023-06-25)南宁市统筹做好强降雨防御和蓄水调水工作
- (2023-06-25)环球快看:“生蠔之王”布列塔尼-贝隆生蠔 King of Oyster-Huître Belon de Bretagne(之四)
- (2023-06-25)全球速读:车主自曝差点被闷死在特斯拉Model X里,车门锁死,原因揭晓
- (2023-06-25)环球今亮点!市政道路与公路的划分(市政道路和公路是怎么区分的)
- (2023-06-25)全球视讯!每日5万警力护航 端午节期间全省社会治安大局平稳
- (2023-06-25)端午假期天津文旅订单同比增380% 跑赢全国大盘
- (2023-06-25)世界速讯:深圳2023年度积分入户将于6月中下旬正式启动 指标共2万个
- (2023-06-25)地下城堡2圣职转职攻略_地下城堡2圣职转职 天天报资讯
- (2023-06-25)世界实时:古麒绒材6月29日首发上会 拟募资5.01亿元
- (2023-06-25)人为什么要工作(人为什么要工作)
- (2023-06-25)至少涨价1500元该买还是买!iPhone 15备货量曝光:苹果出手近亿台|天天视点
- (2023-06-25)热文:《白色城堡》刘非受到祖闻达的启发想做什么?
- (2023-06-25)每日信息:北京低效楼宇加速“改头换面”
- (2023-06-25)为户外劳动者撑起“遮阳伞”-焦点播报
- (2023-06-25)世界快看:探春是什么故事 贾探春5个主要故事情节
- (2023-06-25)环球速读:太原姑娘刘嫱:把时光缝进皮革里
- (2023-06-25)优秀传统文化融入现代生活 端午节彰显新活力|环球信息
- (2023-06-25)与国乒定位有偏差?王曼昱新目标遭遇打击,孙颖莎式难题又要重演|动态
- (2023-06-25)1.06亿人次,超2019年同期!端午出游很“热”-环球热点
- (2023-06-25)红旗H6对比大众CC:动感与稳重融为一体,最美车型该怎么选? 世界今热点
- (2023-06-25)即时:大众集团严重软件问题!旗下新车推迟?曝奥迪Q6 e-tron谍照
- (2023-06-25)主教练有两把刷子!斯卡洛尼放铲,成功破坏对方一次机会
- (2023-06-25)世界快资讯丨10省区市将现大到暴雨 上海广东等地局部有大暴雨 全球热点
- (2023-06-25)焦点热议:白酒进入调整周期?中国酒业协会:短期不乐观 长期不悲观
- (2023-06-25)大英帝国最大时版图_大英帝国 世界热头条
- (2023-06-25)【新视野】中央气象台发布高温黄色预警