小試Blazor——實(shí)現(xiàn)Ant Design Blazor動(dòng)態(tài)表單
前言
(資料圖片僅供參考)
最近想了解下Blazor,于是嘗試使用Blazor寫一個(gè)簡單的低代碼框架,于是就采用了Ant Design Blazor作為組件庫
低代碼框架在表現(xiàn)層的第一步則是動(dòng)態(tài)表單,需要將設(shè)計(jì)時(shí)的結(jié)構(gòu)渲染成運(yùn)行時(shí)的表單,本次主要實(shí)現(xiàn)動(dòng)態(tài)表單,相關(guān)數(shù)據(jù)接口都以返回固定數(shù)據(jù)的形式實(shí)現(xiàn)
實(shí)現(xiàn)
1.項(xiàng)目準(zhǔn)備
先通過命令創(chuàng)建一個(gè)Ant Design Blazor項(xiàng)目,并加入到空的解決方案當(dāng)中:
dotnet new antdesign -o LowCode.Web -ho server
由于我們需要寫一些API接口,所以在Startup類中加入控制器相關(guān)的代碼:
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.菜單接口
在項(xiàng)目中新增Services文件夾,添加MenuServices類并填入固定數(shù)據(jù),并在Startup類中注冊(cè):
public class MenuService { ////// 獲取左側(cè)導(dǎo)航數(shù)據(jù) /// ///public virtual MenuDataItem[] GetMenuData() { return new MenuDataItem[] { new MenuDataItem { Path="/", Name="測(cè)試模塊", Key="Test", Icon="smile", Children=new MenuDataItem[] { new MenuDataItem { Path="/StdForm", Name="動(dòng)態(tài)表單", Key="Form", Icon="plus-square" } } } }; } }
修改BaseicLayout.razor中@code部分,將_menuData改為從MenuService中獲?。?/p>
private MenuDataItem[] _menuData ; [Inject] public MenuService MenuService { get; set; } protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); _menuData = MenuService.GetMenuData(); }
3.表單組件接口
創(chuàng)建一個(gè)簡單的表單與組件的Model:
錄入控件Input:
public class Input { public string Name { get; set; } public string Value { get; set; } }
標(biāo)準(zhǔn)表單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="賬號(hào)" }, new Input() { Name="密碼" } }); return result; } }
4.動(dòng)態(tài)表單頁面
在Pages文件夾下創(chuàng)建一個(gè)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"
運(yùn)行效果
總結(jié)
在Blazor項(xiàng)目中要訪問API接口則需要注入HttpClient類,使用HttpClient請(qǐng)求API接口即可,也可以直接注入Services調(diào)用。
目前僅僅是驗(yàn)證了動(dòng)態(tài)表單的可能性,其他的組件渲染可以根據(jù)Ant Design Blazor官方文檔定義模型結(jié)構(gòu)實(shí)現(xiàn)
參考文檔:
Blazor官方文檔
Ant Design Blazor官方文檔
Ant Design Blazor倉庫
關(guān)鍵詞:
相關(guān)閱讀
-
小試Blazor——實(shí)現(xiàn)Ant Design Blazor動(dòng)態(tài)表單
前言最近想了解下Blazor,于是嘗試使用Blazor寫一個(gè)簡單的低代碼框架, -
霍爾電機(jī)霍爾壞了一個(gè)會(huì)怎樣 霍爾電機(jī)|...
1、電動(dòng)車電機(jī)霍爾工作原理:霍耳的信號(hào)線傳遞電機(jī)里面磁鋼相對(duì)于線圈 -
ibm中國有限公司_IBM的前身是哪一家公司
1、IBM的前身為CTR公司。2、IBM的歷史可以追溯到電子計(jì)算機(jī)發(fā)展前的幾 -
超好用bb霜推薦平價(jià) 6款百元就能購買的...
hello大家好,我是城鄉(xiāng)經(jīng)濟(jì)網(wǎng)小晟來為大家解答以上問題,超好用bb霜推 -
全球即時(shí):泰晤士:曼城改善給B席的續(xù)約...
直播吧6月25日訊《泰晤士報(bào)》報(bào)道,曼城已改善了對(duì)貝爾納多-席爾瓦的續(xù) -
環(huán)球即時(shí):陜西高考生 填報(bào)志愿 “五...
6月24日,經(jīng)陜西省招生委員會(huì)研究決定,2023年全國普通高等學(xué)校招生陜 -
領(lǐng)克是什么牌子的車多少價(jià)格_領(lǐng)克是什么...
解答:1、柯靈汽車是由吉利控股集團(tuán)、吉利汽車集團(tuán)和沃爾沃汽車共同打 -
油葵怎么炒菜_油葵油炒菜吃了有什么好處...
1、油葵油也可以做葵花油,清純透明,清香可口。2、在國外,被譽(yù)為最佳 -
我市特需家長服務(wù)中心成立-全球新消息
6月21日,南京市特需學(xué)生家長服務(wù)中心在南京市特殊教育指導(dǎo)中心揭牌啟 -
環(huán)球快看點(diǎn)丨“以海育人”如何落地
沿海城市幼兒園探索海洋文化與教育的共融——“以海育人”如何落地... -
今日熱訊:n型電池股票是什么?n型電池...
n型電池股票是什么?n型電池相關(guān)龍頭股一覽(2023 6 25),南方財(cái)富網(wǎng)為 -
北京連續(xù)三天最高溫超40℃,6月“炎值”...
京城連續(xù)三日“熱晴不減”,且高溫紅色預(yù)警持續(xù)生效。截至24日13時(shí)5... -
全球速遞!新式軍號(hào),全軍配發(fā)!
新式軍號(hào)即將配發(fā)全軍,近日信息通信部隊(duì)某部接收了一批新式軍號(hào),快來 -
瓦格納集團(tuán)車隊(duì)調(diào)轉(zhuǎn)方向返回營地,最新...
當(dāng)?shù)貢r(shí)間25日凌晨,俄羅斯羅斯托夫州州長格魯貝夫發(fā)布消息稱,瓦格納集 -
我國北部和東部海域?qū)⒂?-7級(jí)風(fēng) 南部沿...
人民網(wǎng)北京6月25日電(記者楊虞波羅)據(jù)中央氣象臺(tái)消息,24日14時(shí)至25 -
焦點(diǎn)播報(bào):東方紅資管周楊:新能源車下游...
東方紅資管周楊在節(jié)目上表示,隨著新能源車整車行業(yè)不斷降價(jià),行業(yè)格局 -
觀察:24日早上北京市交管局接考生求助6起
北京日?qǐng)?bào)訊(記者安然)市交管局昨天發(fā)布,截至上午9時(shí),市交管部門共 -
南京大屠殺幸存者高恒發(fā)去世 在世在冊(cè)...
原標(biāo)題:南京大屠殺幸存者高恒發(fā)去世在世在冊(cè)幸存者僅剩39位 侵華日 -
焦點(diǎn)日?qǐng)?bào):吉林省農(nóng)藥包裝廢棄物回收處...
為扎實(shí)推進(jìn)吉林省農(nóng)藥包裝廢棄物回收處理,省農(nóng)業(yè)農(nóng)村廳在吉林舒蘭召開 -
前5月陜西新能源汽車產(chǎn)量同比增長44.2%...
6月20日,記者從陜西省汽車工業(yè)協(xié)會(huì)獲悉:1月至5月,陜西汽車產(chǎn)量達(dá)49