今日播報(bào)!小試Blazor——實(shí)現(xiàn)Ant Design Blazor動(dòng)態(tài)表單
時(shí)間:2023-06-25 07:30:26
前言
最近想了解下Blazor,于是嘗試使用Blazor寫一個(gè)簡(jiǎn)單的低代碼框架,于是就采用了Ant Design Blazor作為組件庫(kù)
(相關(guān)資料圖)
低代碼框架在表現(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)備
先通過(guò)命令創(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è)簡(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)稿件
今日播報(bào)!小試Blazor——實(shí)現(xiàn)Ant Design Blazor動(dòng)態(tài)表單
大學(xué)獎(jiǎng)學(xué)金申請(qǐng)理由(獎(jiǎng)學(xué)金申請(qǐng)理由300 500) 熱資訊
天天滾動(dòng):綠軍送走斯瑪特 帕金斯直呼不理解 杰弗森安慰:木已成舟了
薪資專家:湖人不會(huì)追歐文 他們專注于留住里夫斯和八村塁-每日播報(bào)
斯瑪特發(fā)文向波士頓告別:雖未拿到第18冠但無(wú)比驕傲
局地氣溫達(dá)40℃!中央氣象臺(tái)繼續(xù)發(fā)布高溫橙色預(yù)警
曝具俊曄回韓國(guó),留大S獨(dú)自面對(duì)風(fēng)波,誰(shuí)是真愛與汪小菲對(duì)比明顯|天天微速訊
世界關(guān)注:3000左右的手機(jī)推薦(3000左右的手機(jī)推薦2019)
業(yè)務(wù)員工作總結(jié)報(bào)告(業(yè)務(wù)員工作總結(jié)) 世界熱推薦
“敬禮娃娃”郎錚637分!已收到北大、人大邀請(qǐng)-世界資訊
將9月底實(shí)現(xiàn)量產(chǎn) 全新一代北京BJ40申報(bào)圖
伊能靜罕曬兒女同框照,哈利從美國(guó)放假回國(guó)|今日關(guān)注
全球聚焦:儋州考生 中考期間遇到突發(fā)狀況怎么辦?不慌!這里有應(yīng)對(duì)大全
玩逆戰(zhàn)游戲太卡什么原因(玩逆戰(zhàn)不流暢怎么辦)
后風(fēng)窗玻璃刮水器及洗滌器圖標(biāo)(前風(fēng)窗玻璃刮水器及洗滌器圖標(biāo))|焦點(diǎn)報(bào)道
巴基斯坦取消進(jìn)口限制以滿足國(guó)際貨幣基金組織要求_今日熱文
市場(chǎng)下行對(duì)于價(jià)值投資來(lái)說(shuō)是好事還是壞事?_每日熱訊
環(huán)球微速訊:端午假期河南旅游接待1266.3萬(wàn)人次同比增長(zhǎng)48.6%
通訊!歐盟通過(guò)第11輪對(duì)俄制裁,俄外交部:制裁非法,已及時(shí)回應(yīng)
教育頻道
超越一個(gè)甲子的輪回 首試豐田皇冠SportCross
1.06億人次!373.10億元!你貢獻(xiàn)了多少? 微頭條
這些城市為何厲害了?看看這些亮眼的數(shù)據(jù): 環(huán)球滾動(dòng)
精選!如果我找服裝設(shè)計(jì)公司給我們公司設(shè)計(jì)工作制服,那么這件服裝的著作權(quán)和版權(quán)
邁阿密國(guó)際老板貝克漢姆社媒曬圖,祝梅西36歲生日快樂-全球速看
證明上周跌停板的1.6萬(wàn)手幾分鐘就被吃掉,就是北上的抄底,內(nèi)資就是一群施貨。


