小试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、【问题描述】:电脑运行慢,操作起来电脑需要反映一段时间。2、【原 -
什么怪物!美国大学生平刘翔:跨栏12秒9...
名不见经传匹兹堡州立大学的大二学生科德尔火了,在阿肯色大奖赛男子11 -
中国癫痫患者超900万,院内到院外规范化...
复旦大学附属儿科医院癫痫关爱日活动。复旦儿科医院供图6月28日将迎来 -
环球快报:影史第二!2023端午档总票房破9亿
据灯塔专业版实时数据,截至6月24日21时33分,2023年端午档(6月22日-6 -
端午假期最后一天 公路返程迎来峰值时段
今天(6月24日)是端午假期的最后一天,很多人明天就要上班了,所以今天 -
环球通讯!局地气温达40℃!中央气象台...
中央气象台今早继续发布高温橙色预警华北黄淮高温持续局地气温达40℃今 -
38岁女星法兰琪一尸两命!怀孕5个月发生...
6月24日,据媒体报道,英国知名女星法兰琪霍夫(FrankieHough)发生车祸 -
上汽大众全新Polo Plus怎么样及广汽讴...
还记得在大概在2000年左右,我家与成千上万的中国家庭一样开始萌生买私 -
焦点短讯!山东农信网上银行下载(山东...
1、电话是可以查询和转账的,但是你必须先到柜台开通电话银行,然后打9 -
世界播报:鲩鱼是什么鱼一般超市能买到吗
关于鲩鱼是什么鱼一般超市能买到吗的内容,包含鲩鱼是什么鱼鲩鱼是什么 -
儿童戴大蝴蝶结怎么扎头发才好看?|当前速讯
1 首先扎一个马尾辫用一根长丝带串过皮筋。2 将丝带拉到下面的位置。把 -
【环球新视野】传荷兰最早下周发布新出...
据日经新闻报道,光刻机大厂ASML高管对外表示,半导体业只有通力合作, -
闪电符号怎么打出来_闪电符号怎么打
1、有,肯定有闪电符号,下面是设置方法:进你的个人设置,在你名字前 -
焦点快播:Ae软件是什么公司旗下的图形...
1、AdobeAfterEffects简称“AE”是Adobe公司推出的一款图形视频处理软 -
青春期少女文胸选择_青春期少女文胸
1、内衣的大小对胸的发育起着至关重要的作用。2、所以,从一开始就要学 -
世界看点:安康节!持艾簪蒲佩香囊 端...
安康节!持艾簪蒲佩香囊端午沐兰祈安康 -
天天通讯!shall是什么意思怎么读英语发...
1、1 (有时与I和we连用,表示一般将来时)将要,会2 (尤用于与I和we连用的 -
环球快播:发动救援队,出动无人机!厦...
近日,一患有老年痴呆症的老人外出超过24小时迟迟未归,杏滨派出所民警 -
迪巴拉和皇马维尼修斯,成队友;迪巴拉...
前罗马球员卡福和阿尔达尔也出席了本次活动,他们都是前巴西球员,因此