<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: YongQuan RAO</title>
    <description>The latest articles on DEV Community by YongQuan RAO (@yongquan).</description>
    <link>https://dev.to/yongquan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F682728%2F1b3756c4-9efc-4679-8aa1-3fda04e7406b.jpg</url>
      <title>DEV Community: YongQuan RAO</title>
      <link>https://dev.to/yongquan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yongquan"/>
    <language>en</language>
    <item>
      <title>Powerful query by Ant Design Blazor and Efcore</title>
      <dc:creator>YongQuan RAO</dc:creator>
      <pubDate>Sun, 11 Sep 2022 11:59:22 +0000</pubDate>
      <link>https://dev.to/yongquan/ant-design-blazor-table-4963</link>
      <guid>https://dev.to/yongquan/ant-design-blazor-table-4963</guid>
      <description>&lt;p&gt;Ant Design Blazor is a worldwide popular Blazor component library. The component Table is particular powerful especially for Blazor Server project. It can seamlessly interact with Entity Framework, supporting pagination, sorting and filtering, and can get ranged and ordered dataset with very little effort. In this post, we will witness how easy to use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;, we create a project with Visual studio 2022 Blazor Server template. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwjc8zg4tebwgp34ygdp5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwjc8zg4tebwgp34ygdp5.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add Ant Design reference by following &lt;a href="https://github.com/ant-design-blazor/ant-design-blazor#import-ant-design-blazor-into-an-existing-project" rel="noopener noreferrer"&gt;https://github.com/ant-design-blazor/ant-design-blazor#import-ant-design-blazor-into-an-existing-project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;, to make it simple, we can use code first to create Entity Framework dbContext and initialize some seed data with a separate sql script.&lt;/p&gt;

&lt;p&gt;Add connectiong string to appsettings.json:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  "ConnectionStrings": {
    "DefaultConnection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=PropertyDB;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Define dbContext and entity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    public class PropertyDbContext : DbContext
    {
        public PropertyDbContext(DbContextOptions&amp;lt;PropertyDbContext&amp;gt; options): base(options)
        {
        }

        public DbSet&amp;lt;Property&amp;gt; Properties { get; set; }
    }

    public class Property
    {
        public int Id { get; set; }
        public string Address { get; set; } = string.Empty;
        public string Suburb { get; set; } = string.Empty;
        public string Postcode { get; set; } = string.Empty;
        public string State { get; set; } = string.Empty;
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Register dbContext:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .Build();
void BuildOptions(DbContextOptionsBuilder options) =&amp;gt; options
    .UseSqlServer(config.GetConnectionString("DefaultConnection"));

builder.Services.AddDbContextFactory&amp;lt;PropertyDbContext&amp;gt;(BuildOptions);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run migrations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet ef migrations add Initial
dotnet ef database update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seed data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INSERT INTO [dbo].[Properties]
           ([Address]
           ,[Suburb]
           ,[Postcode]
           ,[State])
     VALUES
           ('1 Elizabeth Rd', 'Sydney', '2000', 'NSW'),
           ('2 Elizabeth Rd', 'Sydney', '2000', 'NSW'),
           ('3 Elizabeth Rd', 'Sydney', '2000', 'NSW'),
           ('4 Elizabeth Rd', 'Sydney', '2000', 'NSW'),
           ('1 Queen St', 'Rosebery', '2018', 'NSW'),
           ('2 Queen St', 'Rosebery', '2018', 'NSW'),
           ('3 Queen St', 'Chatswood', '2067', 'NSW'),
           ('4 Queen St', 'Chatswood', '2067', 'NSW'),
           ('1 Ravenswood Ave', 'Carlingford', '2118', 'NSW'),
           ('2 Ravenswood Ave', 'Carlingford', '2118', 'NSW'),
           ('3 Ravenswood Ave', 'Epping', '2121', 'NSW'),
           ('4 Ravenswood Ave', 'Epping', '2121', 'NSW')

GO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For now, database and dbContext is ready. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;, add Ant Design Table to razor page, and bind its data source to dbContext.&lt;/p&gt;

&lt;p&gt;Index.razor.cs&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    public partial class Index
    {
        [Inject]
        IDbContextFactory&amp;lt;PropertyDbContext&amp;gt; DbContextFactory { get; set; }

        private IQueryable&amp;lt;Property&amp;gt; Properties { get; set; }

        protected override async Task OnInitializedAsync()
        {
            var context = DbContextFactory.CreateDbContext();
            Properties = context.Properties;
        }
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Index.razor&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Table DataSource="Properties" TItem="Property"&amp;gt;
    &amp;lt;Column TData="int"
            @bind-Field="context.Id"
            Sortable
            Filterable
            ShowSorterTooltip="false"&amp;gt;
    &amp;lt;/Column&amp;gt;

    &amp;lt;Column TData="string"
            Title="Address"
            @bind-Field="context.Address"
            Sortable
            Filterable
            ShowSorterTooltip="false"&amp;gt;
    &amp;lt;/Column&amp;gt;

    &amp;lt;Column TData="string"
            Title="Suburb"
            @bind-Field="context.Suburb"
            Sortable
            Filterable
            ShowSorterTooltip="false" SorterMultiple="5"/&amp;gt;

    &amp;lt;Column TData="string"
            Title="Postcode"
            @bind-Field="context.Postcode"
            Sortable
            Filterable
            ShowSorterTooltip="false" SorterMultiple="3"&amp;gt;
    &amp;lt;/Column&amp;gt;

    &amp;lt;Column TData="string"
            Title="State"
            @bind-Field="context.State"
            Sortable
            Filterable
            ShowSorterTooltip="false" SorterMultiple="4"/&amp;gt;
&amp;lt;/Table&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all. Now let's see the effect. To verify it, we can refer to the sql query.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 1: pagination&lt;/strong&gt;&lt;br&gt;
AntDesign table by default uses page size = 10, which can be customized. When first time loaded, or page-navigated, it only fetches offset data range.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2f8ve009cjwmfj9r1hm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2f8ve009cjwmfj9r1hm.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
SQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exec sp_executesql N'SELECT [p].[Id], [p].[Address], [p].[Postcode], [p].[State], [p].[Suburb]
FROM [Properties] AS [p]
ORDER BY (SELECT 1)
OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY',N'@__p_0 int,@__p_1 int',@__p_0=0,@__p_1=10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Scenario 2: sorting&lt;/strong&gt;&lt;br&gt;
Take column Postcode for instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2762fli2e5zqd9ldvxvy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2762fli2e5zqd9ldvxvy.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
SQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exec sp_executesql N'SELECT [p].[Id], [p].[Address], [p].[Postcode], [p].[State], [p].[Suburb]
FROM [Properties] AS [p]
ORDER BY [p].[Postcode]
OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY',N'@__p_0 int,@__p_1 int',@__p_0=0,@__p_1=10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Scenario 3: filtering&lt;/strong&gt;&lt;br&gt;
Take column Id for instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzindg1zswjc2mp4xfgi2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzindg1zswjc2mp4xfgi2.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8yyzllwqo5onk3u2m56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8yyzllwqo5onk3u2m56.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
SQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exec sp_executesql N'SELECT [p].[Id], [p].[Address], [p].[Postcode], [p].[State], [p].[Suburb]
FROM [Properties] AS [p]
WHERE ([p].[Id] &amp;gt; 5) AND ([p].[Id] &amp;lt; 10)
ORDER BY [p].[Id]
OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY',N'@__p_0 int,@__p_1 int',@__p_0=0,@__p_1=10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Scenario 4: combination with multiple sorting and filtering&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkedbgm03m1drqhzvgdam.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkedbgm03m1drqhzvgdam.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
SQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exec sp_executesql N'SELECT [p].[Id], [p].[Address], [p].[Postcode], [p].[State], [p].[Suburb]
FROM [Properties] AS [p]
WHERE ([p].[Id] &amp;gt; 5) AND ([p].[Id] &amp;lt; 10)
ORDER BY [p].[Postcode], [p].[Suburb] DESC
OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY',N'@__p_0 int,@__p_1 int',@__p_0=0,@__p_1=10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the Blazor Server sample above, we can tell that by just simply binding the Table data source to Entity Framework dbContext, we can achieve data query pagination/offset, sorting and filtering. We can utilize this advantage for data read purpose even in production and it would significantly enhance database access performance and improve development productiveness.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/YongQuan-dotnet/AntTableSample" rel="noopener noreferrer"&gt;https://github.com/YongQuan-dotnet/AntTableSample&lt;/a&gt;&lt;/p&gt;

</description>
      <category>antdesign</category>
      <category>blazor</category>
      <category>dotnet</category>
      <category>efcore</category>
    </item>
    <item>
      <title>Build Blazor WebAssembly With Ant Design Blazor</title>
      <dc:creator>YongQuan RAO</dc:creator>
      <pubDate>Sun, 29 Aug 2021 12:05:36 +0000</pubDate>
      <link>https://dev.to/yongquan/build-blazor-webassembly-with-ant-design-blazor-2pbi</link>
      <guid>https://dev.to/yongquan/build-blazor-webassembly-with-ant-design-blazor-2pbi</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;In the past years, front-end web development has been dominated by Javascript-based framework React, Angular, and Vue, while Blazor web assembly(wasm), a production-ready front-end framework base on .Net runtime, has supplied another choice especially for C# developers. With the default Blazor wasm template, we can create a SPA with a nice-look UI. Alternatively, we can also use Ant Design Blazor, a modern Blazor template with high-quality components, to build rich and interactive interfaces. In this article, we will build Blazor projects with Ant Design of Blazor templates and components.&lt;/p&gt;

&lt;h1&gt;
  
  
  Create Blazor project with Ant Design Template
&lt;/h1&gt;

&lt;p&gt;To start with it, we need firstly install Ant Design Template.&lt;br&gt;
&lt;strong&gt;$ dotnet new --install AntDesign.Templates&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KzDGb6oo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a33xyr71d2vsxik81q5b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KzDGb6oo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a33xyr71d2vsxik81q5b.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
With the template installed successfully, we can now create a Blazor project.&lt;br&gt;
&lt;strong&gt;$ dotnet new antdesign -o MyAntDesignApp&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PTKPTtd3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oz757dag04a3ou8t48y2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PTKPTtd3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oz757dag04a3ou8t48y2.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Now we can run it with Visual Studio 2022.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KQ-rNXGz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gsbq1njz0tg5nwp855vf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KQ-rNXGz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gsbq1njz0tg5nwp855vf.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XTaISAWq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hd9wwyn8oi5v3ju8a9m7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XTaISAWq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hd9wwyn8oi5v3ju8a9m7.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
We can add an ant-design button to see the effect.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_eVeV32Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2g57j9k5i79n8b8dg8ac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_eVeV32Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2g57j9k5i79n8b8dg8ac.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--92hre0GQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gf9rzmelupjhw1qw6ech.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--92hre0GQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gf9rzmelupjhw1qw6ech.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
There is also an option --full to create a project with comprehensive components.&lt;br&gt;
&lt;strong&gt;$ dotnet new antdesign -o MyFullAntDesignApp --full&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_96SuqXS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/31fqu5pme6jh1kb86cek.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_96SuqXS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/31fqu5pme6jh1kb86cek.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aRP3rHio--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/md0paua1ptjgxp0okuxx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aRP3rHio--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/md0paua1ptjgxp0okuxx.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k2yyTbxM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4vpf6luf3ff85ac1iqs5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k2yyTbxM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4vpf6luf3ff85ac1iqs5.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Import Ant Design of Blazor to Existing Project
&lt;/h1&gt;

&lt;p&gt;We can also import Ant Design of Blazor to existing projects very easily. &lt;br&gt;
Imagining we have an existing Blazor wasm project. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YTAZA8UP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fhfjfqitvcs8vrrl06hp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YTAZA8UP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fhfjfqitvcs8vrrl06hp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Firstly we install the package.&lt;br&gt;
&lt;strong&gt;$ dotnet add package AntDesign&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q5GtvlIS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ibnvfkcqt8esy4j0d80w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q5GtvlIS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ibnvfkcqt8esy4j0d80w.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
We can also find it through NuGet.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZoiYy299--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e4xo7lp4t1noijvz7n9e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZoiYy299--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e4xo7lp4t1noijvz7n9e.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Then we register the service at Program.cs.&lt;br&gt;
&lt;strong&gt;&lt;code&gt;builder.Services.AddAntDesign();&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N9aOYJRb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8emdp7phkla41kpys5qi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N9aOYJRb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8emdp7phkla41kpys5qi.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Then we add the links of css and js to index.html.&lt;br&gt;
&lt;strong&gt;&lt;code&gt;&amp;lt;link href="_content/AntDesign/css/ant-design-blazor.css" rel="stylesheet" /&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;&amp;lt;script src="_content/AntDesign/js/ant-design-blazor.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cJZLO2Xm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cp9h5ttdcr7rhked13rr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cJZLO2Xm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cp9h5ttdcr7rhked13rr.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
To use it globally, we can add the using statement at _Imports.razor.&lt;br&gt;
&lt;strong&gt;&lt;code&gt;@using AntDesign&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---qyM3W0i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5hhzzxwu2qe915c1w0q3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---qyM3W0i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5hhzzxwu2qe915c1w0q3.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
To display the pop-up component dynamically, we need add the &lt;strong&gt;&lt;code&gt;&amp;lt;AntContainer /&amp;gt;&lt;/code&gt;&lt;/strong&gt; component in App.razor.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v5mYdtNs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gxtu62r2ide950ycdte.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v5mYdtNs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gxtu62r2ide950ycdte.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Now we can add an ant-design button as well.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LSK6AeHf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uobi34v0a2un5fpqncld.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LSK6AeHf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uobi34v0a2un5fpqncld.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CQbK9dCj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/96w9unuyhpop3u6pffm5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CQbK9dCj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/96w9unuyhpop3u6pffm5.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;We have briefly gone through how to create a Blazor wasm with Ant Design of Blazor from scratch, as well as how to add Ant Design of Blazor template into an existing project. With worldwide popular ant-design components, we can easily create an attractive responsive SPA in the .Net ecosystem just like what React, Angular, and Vue do in Javascript. To know more about Ant Design of Blazor, we can refer to &lt;a href="https://antblazor.com/en-US/"&gt;https://antblazor.com/en-US/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>antdesign</category>
      <category>blazor</category>
      <category>antdesignblazor</category>
      <category>dotnet</category>
    </item>
  </channel>
</rss>
