小试Blazor——实现Ant Design Blazor动态表单
前言
(资料图片仅供参考)
最近想了解下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仓库
关键词:
相关阅读
-
小试Blazor——实现Ant Design Blazor动态表单
前言最近想了解下Blazor,于是尝试使用Blazor写一个简单的低代码框架, -
霍尔电机霍尔坏了一个会怎样 霍尔电机|...
1、电动车电机霍尔工作原理:霍耳的信号线传递电机里面磁钢相对于线圈 -
ibm中国有限公司_IBM的前身是哪一家公司
1、IBM的前身为CTR公司。2、IBM的历史可以追溯到电子计算机发展前的几 -
超好用bb霜推荐平价 6款百元就能购买的...
hello大家好,我是城乡经济网小晟来为大家解答以上问题,超好用bb霜推 -
全球即时:泰晤士:曼城改善给B席的续约...
直播吧6月25日讯《泰晤士报》报道,曼城已改善了对贝尔纳多-席尔瓦的续 -
环球即时:陕西高考生 填报志愿 “五...
6月24日,经陕西省招生委员会研究决定,2023年全国普通高等学校招生陕 -
领克是什么牌子的车多少价格_领克是什么...
解答:1、柯灵汽车是由吉利控股集团、吉利汽车集团和沃尔沃汽车共同打 -
油葵怎么炒菜_油葵油炒菜吃了有什么好处...
1、油葵油也可以做葵花油,清纯透明,清香可口。2、在国外,被誉为最佳 -
我市特需家长服务中心成立-全球新消息
6月21日,南京市特需学生家长服务中心在南京市特殊教育指导中心揭牌启 -
环球快看点丨“以海育人”如何落地
沿海城市幼儿园探索海洋文化与教育的共融——“以海育人”如何落地... -
今日热讯:n型电池股票是什么?n型电池...
n型电池股票是什么?n型电池相关龙头股一览(2023 6 25),南方财富网为 -
北京连续三天最高温超40℃,6月“炎值”...
京城连续三日“热晴不减”,且高温红色预警持续生效。截至24日13时5... -
全球速递!新式军号,全军配发!
新式军号即将配发全军,近日信息通信部队某部接收了一批新式军号,快来 -
瓦格纳集团车队调转方向返回营地,最新...
当地时间25日凌晨,俄罗斯罗斯托夫州州长格鲁贝夫发布消息称,瓦格纳集 -
我国北部和东部海域将有6-7级风 南部沿...
人民网北京6月25日电(记者杨虞波罗)据中央气象台消息,24日14时至25 -
焦点播报:东方红资管周杨:新能源车下游...
东方红资管周杨在节目上表示,随着新能源车整车行业不断降价,行业格局 -
观察:24日早上北京市交管局接考生求助6起
北京日报讯(记者安然)市交管局昨天发布,截至上午9时,市交管部门共 -
南京大屠杀幸存者高恒发去世 在世在册...
原标题:南京大屠杀幸存者高恒发去世在世在册幸存者仅剩39位 侵华日 -
焦点日报:吉林省农药包装废弃物回收处...
为扎实推进吉林省农药包装废弃物回收处理,省农业农村厅在吉林舒兰召开 -
前5月陕西新能源汽车产量同比增长44.2%...
6月20日,记者从陕西省汽车工业协会获悉:1月至5月,陕西汽车产量达49