<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      小試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<NavigationManager>().BaseUri)
                  });
                  services.Configure<ProSettings>(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
          {
              /// <summary>
              /// 獲取左側導航數據
              /// </summary>
              /// <returns></returns>
              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<Input>();
              }
              public List<Input> 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<Input>(){
                      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<StandardFormModel> StdFormModel { get; set; }
      
              [Inject]
              public HttpClient HttpClient { get; set; }
           public void Init() { var formStruc = HttpClient.GetFromJsonAsync<StandardFormModel>("api/Form/GetFormStruc").Result; StandardFormModel= formStruc; } protected override async Task OnInitializedAsync() { Init(); await base.OnInitializedAsync(); } }

        

      StdForm.razor:

      @page "/StdForm"
      <Form @ref="StdFormModel"
            Model="StandardFormModel"
          LabelColSpan="1"
          WrapperColSpan="6">
      
          @foreach (var item in StandardFormModel.ArrayInput)
          {
              <FormItem Label="@item.Name">
      
                  @if (item is Model.Component.Input)
                  {
                      <Input @bind-Value="@item.Value"/>
                  }
      
              </FormItem>
          }
      
      </Form>
      

        

      運行效果

       

      總結

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

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

      參考文檔:

      Blazor官方文檔

      Ant Design Blazor官方文檔

      Ant Design Blazor倉庫

      posted @ 2023-06-24 22:25  梳墨呀  閱讀(1987)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲国产av无码精品无广告| 好紧好爽午夜视频| 亚洲深夜精品在线观看| 国产成人免费午夜在线观看| 国产精品一二三区久久狼| 日本一区二区三区在线看| 好了av四色综合无码| 国产人妇三级视频在线观看| 同性男男黄gay片免费| 久热这里只有精品12| 九九热在线精品视频免费| 成人片黄网站色大片免费| 91老熟女老人国产老太| 国产成人精品亚洲日本在线观看| 久久人与动人物a级毛片 | 国产一区二区日韩经典| 最近中文字幕日韩有码| 国产精品一二三区久久狼| 最近中文字幕完整版2019| 8050午夜二级无码中文字幕| 亚洲精品一区二区区别| 国产精品午夜精品福利| 一区二区三区四区五区黄色| 中文字幕无码色综合网| 日韩精品无码去免费专区| 国内精品无码一区二区三区| 亚洲高清WWW色好看美女| 亚洲综合小综合中文字幕| 精品国产一区二区三区av片| 中文字幕在线日韩| 亚洲 制服 丝袜 无码| 色综合天天综合网中文伊| 国内少妇偷人精品免费| 亚洲国产天堂久久综合226114| 中文字幕日韩一区二区不卡| 草裙社区精品视频播放| 竹菊影视欧美日韩一区二区三区四区五区 | 久久天天躁夜夜躁狠狠| 西西444www高清大胆| 深夜免费av在线观看| 麻阳|