小试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写一个简单的低代码框架, -
端午假期青岛“铁公机”客流近114万人次...
端午假期“铁公机”客流近114万人次青岛至日韩、东南亚航班客座率较... -
全球新资讯:倒计时1天 丨 世界互联网...
倒计时1天丨世界互联网大会数字文明尼山对话:人工智能赋能千行百业假 -
【天天播资讯】推动品牌建设上台阶
品牌是高质量发展的重要标志,也是商业竞争和文化传播的重要方式。中国 -
环球短讯!端午假期广东累计接待游客202...
记者从广东省文化和旅游厅了解到,据初步测算,2023年端午节假期3天(6 -
环球关注:长三角铁路迎来返程客流高峰...
6月24日是端午小长假最后一天,长三角铁路迎来返程客流高峰,预计发送 -
香港一客机中止起飞 11人受伤 8人稳定...
中新社香港6月24日电(记者曾平)国泰航空一班前往洛杉矶的客机中止起飞 -
看完《上甘岭》新预告!我难掩激动,终...
打得一拳开,免得百拳来。这句话一出来,不用我多说,大家应该知道今天 -
党建引领促共建 端午“粽”情暖民心
翔安市政集团泊车管理有限公司党支部组织党员志愿者到马巷街道友民社区 -
甘肃高考查分网:2023年甘肃高考成绩查...
2023年甘肃高考成绩查询入口6月25日13时左右开通,考生可点击以下链接 -
唏嘘!被7千万出售后,23岁米兰未来领袖...
尽管还没有正式官宣,但23岁的意大利国脚托纳利离开AC米兰加盟纽卡斯尔 -
《支付宝》神奇海洋12月9日答案 全球视点
支付宝神奇海洋12月9日的问题是:红树林被称为“潮汐林”,因为它的... -
儿童戴大蝴蝶结怎么扎头发才好看?-天天...
1 首先扎一个马尾辫用一根长丝带串过皮筋。2 将丝带拉到下面的位置。把 -
玩家不满FF16遭差评轰炸:他们代表不了...
近日,《最终幻想16》在M站的用户评分正式解禁,相较于整体积极的媒体 -
高温天饮食安全实用常识,请收好
高温天饮食安全实用常识,请收好 -
浙江龙游发生5车追尾事故,致6人死亡-世...
龙游县公安局6月24日发布警情通报:2023年6月23日13时51分,351国道龙 -
太原人!高温“炙烤”,注意防暑降温~
暑气炎炎晴热主打高温又出来放肆了昨天我省阳泉的大部太原、临汾、运城 -
乘客高铁上腹痛倒地,博士后妙手施针-每...
6月22日是端午小长假的第一天,成都中医药大学附属医院男科博士后申毅 -
长城景区门事件引质疑
金山岭长城是世界文化遗产,也是全国重点文物保护单位,容不得任何人随 -
全球看热讯:预计年内上市 奇瑞TJ-1官...
日前,奇瑞官方宣布,旗下TJ-1定名探索06,新车作为品牌下全新紧凑型SU