小試Blazor——實(shí)現(xiàn)Ant Design Blazor動(dòng)態(tài)表單
時(shí)間:2023-06-25 06:58:07
前言
最近想了解下Blazor,于是嘗試使用Blazor寫一個(gè)簡(jiǎn)單的低代碼框架,于是就采用了Ant Design Blazor作為組件庫(kù)
(資料圖)
低代碼框架在表現(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中獲取:
private MenuDataItem[] _menuData ; [Inject] public MenuService MenuService { get; set; } protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); _menuData = MenuService.GetMenuData(); }3.表單組件接口
創(chuàng)建一個(gè)簡(jiǎn)單的表單與組件的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)表單頁(yè)面
在Pages文件夾下創(chuàng)建一個(gè)StdForm.razor和StdForm.razor.cs文件
StdForm.razor.cs(注意partial):
public partial class StdForm { public StandardFormModel StandardFormModel { get; set; } public Form StdFormModel { 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倉(cāng)庫(kù)
相關(guān)稿件
小試Blazor——實(shí)現(xiàn)Ant Design Blazor動(dòng)態(tài)表單
天天快資訊:索尼PS5串流掌機(jī)價(jià)格來(lái)了:2100元 好像不貴
江淮A5 PLUS正式上市 售價(jià)6.58-8.58萬(wàn)元
最新研究:史前時(shí)期地球每天時(shí)長(zhǎng)僅19小時(shí)
端午假期最后一天 公路返程迎來(lái)峰值時(shí)段-世界聚焦
強(qiáng)鏈延鏈贏得發(fā)展主動(dòng)權(quán)——訪恒力集團(tuán)董事長(zhǎng)、總裁陳建華|每日速訊
雄安新區(qū)營(yíng)造一流營(yíng)商環(huán)境
焦點(diǎn)快看:普京下令平叛 瓦格納指揮官受刑事調(diào)查
“五年來(lái)最火端午”大數(shù)據(jù):這些城市最熱門 全球視點(diǎn)
呼聲與回應(yīng)|業(yè)主擔(dān)心涇陽(yáng)奧園譽(yù)景灣不能如期交房,施工進(jìn)度看這里
速度超過飛機(jī),冒著綠光…成都夜空現(xiàn)UFO?科普博主回應(yīng)→|世界時(shí)訊
環(huán)球通訊!普京發(fā)表電視講話說(shuō)將采取果斷行動(dòng)穩(wěn)定局勢(shì)
【天天熱聞】聯(lián)合國(guó)人權(quán)高專辦呼吁在蘇丹和乍得之間建立人道主義走廊
環(huán)球通訊!0-2到3-2!張本美和驚天大逆轉(zhuǎn),淘汰名將進(jìn)決賽,爭(zhēng)奪女單冠軍
WTT突尼斯挑戰(zhàn)賽最新戰(zhàn)報(bào)!國(guó)乒5項(xiàng)目只剩男單獨(dú)苗|環(huán)球訊息
男籃開啟新集訓(xùn) 喬帥瞄準(zhǔn)奧運(yùn)門票-今日熱搜
【環(huán)球快播報(bào)】俄媒:俄南部軍區(qū)位于羅斯托夫的總部大樓被“瓦格納”成員包圍
今日熱門!共赴一場(chǎng)云上梯田夢(mèng)想紅河的美麗之約
環(huán)球速遞!沈陽(yáng)6.1萬(wàn)余中考生今日赴考場(chǎng)
內(nèi)飾迎調(diào)整,新款星途凌云官圖發(fā)布 天天快播
羅馬諾:曼聯(lián)不會(huì)尋求巴黎圣日耳曼姆巴佩和內(nèi)馬爾的交易 世界熱推薦
視頻|看尼山 夜空璀璨 環(huán)球今日?qǐng)?bào)
教育頻道
男籃開啟新集訓(xùn) 喬帥瞄準(zhǔn)奧運(yùn)門票-今日熱搜
內(nèi)飾迎調(diào)整,新款星途凌云官圖發(fā)布 天天快播
洛陽(yáng)不符合新國(guó)標(biāo)的電動(dòng)車可以上牌嗎?-快播
每日速訊:iPhone 15 已經(jīng)確定,可能會(huì)是近幾年最受歡迎的蘋果手機(jī)
江南華南多地暴雨如注 京津冀魯?shù)鹊鼗蛟偬魬?zhàn)40℃
全球視訊!2023年1-4月中國(guó)銅材產(chǎn)量為687萬(wàn)噸 華東地區(qū)產(chǎn)量最高(占比63%)


