久久精品五福影院1421_亚洲看片免费_www国产亚洲精品久久麻豆_影音先锋中文字幕资源

您的位置:首頁>新聞 > 觀察 >

小試Blazor——實現Ant Design Blazor動態表單

2023-06-25 09:28:06    來源:博客園

前言


(資料圖片僅供參考)

最近想了解下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 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"
@foreach (var item in StandardFormModel.ArrayInput) { @if (item is Model.Component.Input) { } }

運行效果

總結

在Blazor項目中要訪問API接口則需要注入HttpClient類,使用HttpClient請求API接口即可,也可以直接注入Services調用。

目前僅僅是驗證了動態表單的可能性,其他的組件渲染可以根據Ant Design Blazor官方文檔定義模型結構實現

參考文檔:

Blazor官方文檔

Ant Design Blazor官方文檔

Ant Design Blazor倉庫

關鍵詞:

相關閱讀

久久精品五福影院1421_亚洲看片免费_www国产亚洲精品久久麻豆_影音先锋中文字幕资源
麻豆传传媒久久久爱| 大胆欧美熟妇xx| 欧美一区二区视频在线播放| 丰满人妻一区二区三区53号| 国产h视频在线播放| 手机免费av片| 久久免费视频3| 日产精品久久久久久久蜜臀| jizz18女人| 日本va中文字幕| 男女啪啪免费视频网站| 小说区视频区图片区| 自拍偷拍 国产| 人妻有码中文字幕| 男人添女荫道口喷水视频| 男女男精品视频站| 久久久精品在线视频| av在线观看地址| 日本三级福利片| 亚洲精品免费一区亚洲精品免费精品一区 | 免费特级黄色片| 99久久99精品| 中文字幕亚洲影院| 久久艹这里只有精品| 三日本三级少妇三级99| 亚洲日本黄色片| 黄色免费高清视频| 欧洲在线免费视频| 男女爱爱视频网站| 成人黄色片免费| www插插插无码免费视频网站| 日本一区二区三区四区五区六区| 国产欧美综合一区| 一二三四中文字幕| av在线观看地址| 日本精品久久久久中文字幕| 欧美视频在线免费播放| 国产男女在线观看| 五月天中文字幕在线| 性做爰过程免费播放| 4444在线观看| av免费观看网| 国产精品igao| 伊人免费视频二| 中文字幕日韩精品无码内射| 免费毛片网站在线观看| 亚洲色图 在线视频| 在线视频一二区| 野外做受又硬又粗又大视频√| 久久视频这里有精品| 999在线免费视频| 丰满女人性猛交| 欧美一级片免费播放| 国产成人无码av在线播放dvd| 日韩大片一区二区| 国产又粗又猛又爽又黄的网站| 久在线观看视频| 国产精品88久久久久久妇女 | 日韩精品第1页| 国产超级av在线| 欧美在线a视频| 免费高清在线观看免费| 女同性恋一区二区| 超碰在线人人爱| 日韩小视频在线播放| 57pao国产成永久免费视频| 欧美日韩成人免费视频| 国产又粗又硬又长| 在线免费看污网站| 国产区二区三区| 99热成人精品热久久66| 国产亚洲黄色片| 亚洲天堂第一区| 日韩视频在线免费播放| 怡红院亚洲色图| 亚洲精品视频导航| 成年人网站大全| 日韩一级免费在线观看| 狠狠干 狠狠操| 男人天堂手机在线视频| 青青草综合在线| 日韩精品视频网址| 国产美女视频免费看| 国产精品嫩草影院8vv8| 久久久久久久久久久久91| 日日碰狠狠躁久久躁婷婷| 日韩欧美亚洲天堂| 国产激情在线观看视频| 成年人在线看片| 一本久道综合色婷婷五月| 美女一区二区三区视频| 999在线免费视频| 三级av免费观看| 欧美国产日韩在线视频| 天天久久综合网| 久久免费一级片| 动漫av网站免费观看| 国产淫片av片久久久久久| 日本一极黄色片| 一级黄色大片儿| 青春草国产视频| 久久久久久香蕉| 91网址在线观看精品| 被灌满精子的波多野结衣| 无码播放一区二区三区| 亚洲污视频在线观看| 小说区视频区图片区| www国产精品内射老熟女| 九一精品在线观看| 米仓穗香在线观看| 国产熟人av一二三区| 亚洲一区二区福利视频| 国产va亚洲va在线va| 国产一二三区av| 免费拍拍拍网站| 99热一区二区| 欧美在线观看www| 91在线第一页| wwwwxxxx日韩| 成人短视频在线观看免费| 日韩av片网站| 欧美在线观看成人| 女同性恋一区二区| 色悠悠久久综合网| 欧美综合在线播放| 丰满女人性猛交| 超碰在线人人爱| 国产成人无码一二三区视频| av磁力番号网| 日本免费黄视频| 亚洲色图都市激情| 中文字幕一区久久| 成人亚洲视频在线观看| 日本丰满少妇xxxx| 隔壁人妻偷人bd中字| 中日韩av在线播放| 日本精品免费在线观看| 精品免费久久久久久久| 视频区 图片区 小说区| 亚洲第一中文av| 亚洲最大综合网| 永久免费的av网站| 日本激情视频在线| 无码人妻精品一区二区三区66| 欧美爱爱视频免费看| 国产曰肥老太婆无遮挡| 亚洲美女自拍偷拍| 99精品一级欧美片免费播放| 亚洲一二三av| 男女激烈动态图| 精品视频在线观看一区二区| 国产999免费视频| 亚洲综合123| 日韩欧美视频免费在线观看| 99亚洲国产精品| 欧美又粗又长又爽做受| 欧美乱大交xxxxx潮喷l头像| ww国产内射精品后入国产| 奇米精品一区二区三区| 成年人免费大片| 久久久久久久久久久久久久久国产| 激情综合网俺也去| 成人不卡免费视频| 国产xxxx振车| 密臀av一区二区三区| 岛国毛片在线播放| 做爰高潮hd色即是空| 男人添女荫道口女人有什么感觉| 欧美又粗又长又爽做受| 日本精品www| 色呦色呦色精品| 日韩一二区视频| 欧美日韩亚洲一| 中文字幕中文在线| 警花观音坐莲激情销魂小说 | 精品视频在线观看一区| 久久成人免费观看| 五月婷婷丁香色| 水蜜桃在线免费观看| 国产在线青青草| 伊人影院综合在线| 日日摸日日碰夜夜爽无码| 8x8x最新地址| 成人免费在线视频播放| 色婷婷综合久久久久中文字幕 | 999久久久精品视频| 18禁裸男晨勃露j毛免费观看| 可以在线看的av网站| 日本在线观看视频一区| 播放灌醉水嫩大学生国内精品| 国产福利在线免费| 久久亚洲中文字幕无码| 午夜免费福利网站| 18岁视频在线观看| 国产美女作爱全过程免费视频| 99视频免费播放| 免费国产a级片| 天堂8在线天堂资源bt| 91香蕉视频网址| mm131亚洲精品|