From de8b00beb1d0bcbab021aca38e79f195fd2d56c7 Mon Sep 17 00:00:00 2001 From: Backiaraj Date: Wed, 29 Oct 2025 13:31:44 +0530 Subject: [PATCH 1/2] Updated the Blazor common UG documentation --- .../common-installation-errors.md | 79 ++++++------- blazor/installation/install-nuget-packages.md | 26 ++--- .../linux-installer/how-to-download.md | 74 ++++++------ .../linux-installer/how-to-install.md | 36 +++--- .../mac-installer/how-to-download.md | 52 ++++----- .../mac-installer/how-to-install.md | 69 +++++------ .../offline-installer/how-to-download.md | 58 +++++----- .../offline-installer/how-to-install.md | 76 ++++++------ .../web-installer/how-to-download.md | 56 ++++----- .../web-installer/how-to-install.md | 94 +++++++-------- .../build-a-blazor-stay-reservation-app.md | 109 +++++++++--------- ...build-your-first-blazor-app-with-blocks.md | 55 +++++---- blazor/ui-kit/getting-started.md | 51 ++++---- blazor/ui-kit/overview.md | 19 +-- .../code-snippet.md | 44 +++---- .../convert-project.md | 38 +++--- .../create-project.md | 98 ++++++++-------- .../download-and-installation.md | 69 +++++------ .../overview.md | 21 ++-- .../upgrade-project.md | 32 ++--- 20 files changed, 575 insertions(+), 581 deletions(-) diff --git a/blazor/installation/common-installation-errors.md b/blazor/installation/common-installation-errors.md index 10c52a8911..c7664465ff 100644 --- a/blazor/installation/common-installation-errors.md +++ b/blazor/installation/common-installation-errors.md @@ -1,13 +1,13 @@ --- layout: post -title: Installation Errors in Blazor - Syncfusion -description: Learn here about the common installation errors and solution to those errors in Syncfusion Blazor Components installation. +title: Common installation errors in Blazor | Syncfusion +description: Understand common Syncfusion Blazor installer errors, their causes, and solutions including unlock key issues, license expiration, concurrent installers. platform: Blazor -component: Common +control: Common documentation: ug --- -# Common Installation Errors +# Common installation errors This article describes the most common installation errors, as well as the causes and solutions to those errors. @@ -21,28 +21,28 @@ This article describes the most common installation errors, as well as the cause **Error Message:** Sorry, the provided unlock key is a trial unlock key and cannot be used to unlock the licensed version of our Essential Studio® for Blazor installer. -![Installation Unlock Error](images/installation-error-1.png) +![Unlock key error when using a trial key with the licensed installer](images/installation-error-1.png) -**Reason**
You are attempting to use a Trial unlock key to unlock the licensed installer. +**Reason:**
A trial unlock key is being used with the licensed installer. -**Suggested solution**
Only a licensed unlock key can unlock a licensed installer. So, to unlock the Licensed installer, use the Licensed unlock key. To generate the licensed unlock key, refer to [this](https://support.syncfusion.com/kb/article/2757/how-to-generate-syncfusion-setup-unlock-key-from-syncfusion-support-account) article. +**Suggested solution:** Only a licensed unlock key can unlock a licensed installer. So, to unlock the Licensed installer, use the Licensed unlock key. To generate the licensed unlock key, refer to [this](https://support.syncfusion.com/kb/article/2757/how-to-generate-syncfusion-setup-unlock-key-from-syncfusion-support-account) article. ## License has expired **Error Message:** Your license for Syncfusion® Essential Studio® for Blazor has been expired since {date}. Renew your subscription and try again. -***Online Installer*** +***Online installer*** -![Installation License Expired Error](images/installation-error-2.png) +![License expired message in the web installer](images/installation-error-2.png) -**Reason**
This error message will appear if your license has expired. +**Reason:** This error message will appear if your license has expired. -**Suggested solution**
You can choose from the options listed below. +**Suggested solution:** Choose one of the following options. -1. You can renew your subscription [here](https://www.syncfusion.com/account/my-renewals). -2. You can get a new license [here](https://www.syncfusion.com/sales/products). -3. You can reach out to our sales team by emailing [sales@syncfusion.com](mailto:sales@syncfusion.com). -4. You can also extend the 30-day trial period after your trial license has expired. +1. Renew the subscription [here](https://www.syncfusion.com/account/my-renewals) +2. Purchase a new license [here](https://www.syncfusion.com/sales/products) +3. Contact sales: sales@syncfusion.com +4. If applicable, extend the 30‑day trial period. ## Unable to find a valid license or trial @@ -50,60 +50,61 @@ This article describes the most common installation errors, as well as the cause ***Offline installer*** -![Installation Offline Installer Error](images/installation-error-3.png) +![Account has no valid license or trial in the offline installer](images/installation-error-3.png) ***Online installer*** -![Installation Online Installer Error](images/installation-error-4.png) +![Account has no valid license or trial in the web installer](images/installation-error-4.png) -**Reason**
The following are possible causes of this error: +**Reason:** One of the following is true: -* When your trial period expired -* When you don’t have a license or an active trial -* You are not the license holder of your license -* Your account administrator has not yet assigned you a license. +* The 30‑day trial has expired +* The account has no license or active trial +* The user is not the license holder for the product +* The account administrator has not assigned a license to the user -**Suggested solution**
-1. You can get a new license [here](https://www.syncfusion.com/sales/products). -2. Contact your account administrator. -3. Send an email to [clientrelations@syncfusion.com](mailto:clientrelations@syncfusion.com) to request a license. -4. You can reach out to our sales team by emailing [sales@syncfusion.com](mailto:sales@syncfusion.com). +**Suggested solution:** +1. Purchase a license: https://www.syncfusion.com/sales/products +2. Ask the account administrator to assign a license in Syncfusion account portal +3. Request assistance: clientrelations@syncfusion.com +4. Contact sales: sales@syncfusion.com ## Unable to install because of another installation **Error Message:** Another installation is in progress. You cannot start this installation without completing all other currently active installations. Click cancel to end this installer or retry to attempt after currently active installation completed to install again. -![Installation Error Another MSI Running](images/installation-error-5.png) +![Another installation in progress error dialog](images/installation-error-5.png) + +**Reason:** You are trying to install when another installation is already running in your machine. -**Reason**
You are trying to install when another installation is already running in your machine. +**Suggested solution:** Open and kill the msiexec process in the task manager and then continue to install Syncfusion. If the problem is still present, restart the computer and try Syncfusion® installer. -**Suggested solution**
Open and kill the msiexec process in the task manager and then continue to install Syncfusion. If the problem is still present, restart the computer and try Syncfusion® installer. -1. Open the Windows Task Manager. +1. Open Windows Task Manager. 2. Browse the Details tab. 3. Select the msiexec.exe and click **End task**. -![Installation Error MSIEXEC Kill](images/installation-error-6.png) +![Windows Task Manager showing msiexec.exe to end task](images/installation-error-6.png) ## Unable to install due to controlled folder access ***Offline*** -**Error Message:** Controlled folder access seems to be enabled in your machine. The provided install or samples location (e.g., Public Documents) is protected by the controlled folder access settings. +**Error Message:** Controlled folder access seems to be enabled on this machine. The provided install or samples location (for example, Public Documents) is protected by controlled folder access settings. -![Installation Offline Installer Error Controlled Folder Access](images/installation-error-7.png) +![Offline installer controlled folder access warning](images/installation-error-7.png) ***Online*** -**Error Message:** Controlled folder access seems to be enabled in your machine. The provided install, samples, or download location (e.g., Public Documents) is protected by the controlled folder access settings. +**Error Message:** Controlled folder access seems to be enabled on this machine. The provided install, samples, or download location (for example, Public Documents) is protected by controlled folder access settings. -![Installation Online Installer Error Controlled Folder Access](images/installation-error-8.png) +![Web installer controlled folder access warning](images/installation-error-8.png) -**Reason**
You have enabled controlled folder access settings on your computer. +**Reason:** You have enabled controlled folder access settings on your computer. -***Suggested solution*** +**Suggested solution:** **Suggestion 1:** -* We will ship our demos in the public documents folder by default. +* Syncfusion demos are installed to the Public Documents folder by default. * You have controlled folder access enabled on your machine, so our demos cannot be installed in the documents folder. If you need to install our demos in the Documents folder, follow the steps in this [link](https://support.microsoft.com/en-us/windows/allow-an-app-to-access-controlled-folders-b5b6627a-b008-2ca2-7931-7e51e912b034) and disable the controlled folder access. * You can enable this option after the installing our Syncfusion® setup. diff --git a/blazor/installation/install-nuget-packages.md b/blazor/installation/install-nuget-packages.md index e321323387..5adbf2b4b5 100644 --- a/blazor/installation/install-nuget-packages.md +++ b/blazor/installation/install-nuget-packages.md @@ -1,13 +1,13 @@ --- layout: post -title: Install Syncfusion Blazor NuGet packages - Syncfusion -description: Learn here about the how to install Syncfusion Blazor NuGet packages from Package manager and NuGet manager. +title: Install Syncfusion Blazor NuGet packages | Syncfusion +description: Learn here about how to install Syncfusion Blazor NuGet packages using the Package Manager UI, .NET CLI, and Package Manager Console. Explore to more details. platform: Blazor -component: Common +control: Common documentation: ug --- -# Install Syncfusion® Blazor NuGet packages +# Install Syncfusion® Blazor NuGet packages ## Overview @@ -22,27 +22,27 @@ The NuGet **Package Manager UI** allows you to search, install, uninstall, and u 1. Right-click on the Blazor application or solution in the Solution Explorer, and choose **Manage NuGet Packages...** - ![Manage NuGet Packages add-in](images/ManageNuGet.png) + ![Open Manage NuGet Packages from Solution Explorer](images/ManageNuGet.png) As an alternative, after opening the Blazor application in Visual Studio, go to the **Tools** menu and after hovering **NuGet Package Manager**, select **Manage NuGet Packages for Solution...** 2. The Manage NuGet Packages window will open. Navigate to the **Browse** tab, then search for the Syncfusion® Blazor NuGet packages using a term like **"Syncfusion® Blazor"** and select the appropriate Syncfusion® Blazor NuGet package for your development. - N> The [nuget.org](https://api.nuget.org/v3/index.json) package source is selected by default in the Package source drop-down. If your Visual Studio does not have nuget.org configured, follow the instructions in the [Microsoft documents](https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio#package-sources) to set up the nuget.org feed URL. + N> The [nuget.org](https://api.nuget.org/v3/index.json) package source is selected by default. If Visual Studio does not have nuget.org configured, follow the instructions in the [Microsoft documents](https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio#package-sources) to set up the nuget.org feed URL. - ![Blazor NuGet Packages Search](images/NuGetsearch.png) + ![Search for Syncfusion Blazor packages in the Browse tab](images/NuGetsearch.png) 3. When you select a Blazor package, the right side panel will provide more information about it. 4. By default, the package is selected with the latest version. You can choose the required version and click the **Install** button and accept the license terms. The package will be added to your Blazor application. - ![Blazor NuGet Packages Install](images/InstallNuGet.png) + ![Install a Syncfusion Blazor package from the Package Manager UI](images/InstallNuGet.png) 5. At this point, your application has all the required Syncfusion® assemblies, and you will be ready to start building high-performance, responsive app with [Syncfusion® Blazor components](https://www.syncfusion.com/blazor-components). Also, you can refer to the [Blazor help document](https://blazor.syncfusion.com/documentation/introduction) for development. ## Installation using Dotnet (.NET) CLI -The [dotnet Command Line Interface (CLI)](https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-dotnet-cli), allows you to add, restore, pack, publish, and manage packages without making any changes to your application files. [Dotnet add package](https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-add-package?tabs=netcore2x) adds a package reference to the application file, then runs [dotnet restore](https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-restore?tabs=netcore2x) to install the package. +The [dotnet Command Line Interface (CLI)]((https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-dotnet-cli)) lets you add, restore, pack, publish, and manage packages without making any changes to your application files. [Dotnet add package](https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-add-package?tabs=netcore2x) adds a package reference to the application file, then runs [dotnet restore](https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-restore?tabs=netcore2x) to install the package. Follow the below instructions to use the dotnet CLI command to install the Syncfusion® Blazor NuGet packages. @@ -72,7 +72,7 @@ The **Package Manager Console** saves NuGet packages installation time since you 1. To show the Package Manager Console, open your Blazor application in Visual Studio and navigate to **Tools -> NuGet Package Manager -> Package Manager Console**. - ![Package Manager Console ](images/console.png) + ![Package Manager Console in Visual Studio](images/console.png) 2. The **Package Manager Console** will be shown at the bottom of the screen. You can install the Syncfusion® Blazor NuGet packages by entering the following NuGet installation commands. @@ -84,13 +84,13 @@ The **Package Manager Console** saves NuGet packages installation time since you **For example:** Install-Package Syncfusion.Blazor.Grid - N> You can find the list of Syncfusion® Blazor NuGet packages which are published in nuget.org from [here](https://www.nuget.org/packages?q=Tags%3A%22Blazor%22+syncfusion) + N> Browse Syncfusion® Blazor NuGet packages on [NuGet.org](https://www.nuget.org/packages?q=Tags%3A%22Blazor%22+syncfusion). ***Install specified Syncfusion® Blazor NuGet package in specified Blazor application*** The following command will install the Syncfusion® Blazor NuGet package in the given Blazor application. - ```Install-Package - ProjectName ``` + ```Install-Package -ProjectName ``` **For example:** Install-Package Syncfusion.Blazor.Grid -ProjectName SyncfusionBlazorApp @@ -98,7 +98,7 @@ The **Package Manager Console** saves NuGet packages installation time since you ```Install-Package Syncfusion.Blazor.Grid -Version 19.2.0.44``` - ![Package Manager Console Output ](images/ConsoleInstallationOutput.png) + ![Package Manager Console output showing installed package](images/ConsoleInstallationOutput.png) 4. The NuGet package manager console will install the Syncfusion® Blazor NuGet package as well as the dependencies it has. When the installation is complete, the console will show that your Syncfusion® Blazor package has been successfully added to the application. diff --git a/blazor/installation/linux-installer/how-to-download.md b/blazor/installation/linux-installer/how-to-download.md index 811eec14ca..235ae9f53e 100644 --- a/blazor/installation/linux-installer/how-to-download.md +++ b/blazor/installation/linux-installer/how-to-download.md @@ -1,22 +1,22 @@ --- layout: post -title: Downloading Syncfusion Blazor Linux installer - Syncfusion -description: Learn here about the how to download Syncfusion Blazor linux installer packages from syncfusion website. +title: Download the Syncfusion Blazor Linux installer | Syncfusion +description: Learn how to download Blazor Linux installer for trial or licensed use from your Syncfusion account, including Start trials and License and Downloads options. platform: Blazor -component: Common +control: Common documentation: ug --- -# Download Syncfusion® Blazor Linux Installer +# Download the Syncfusion® Blazor Linux installer -The Syncfusion® installer can be downloaded from the [Syncfusion](https://www.syncfusion.com/) website. You can either download the licensed installer or try our trial installer depending on your license. +Download the Syncfusion Blazor Linux installer from the Syncfusion website. Download options depend on the account status: trial or licensed. - - Trial Installer - - Licensed Installer +- Trial installer +- Licensed installer -You can download the Syncfusion® installer from [Syncfusion.com](https://www.syncfusion.com/) website +You can download the Syncfusion® installer from [Syncfusion.com](https://www.syncfusion.com/) website. -## Download the Trial Version +## Download the trial version Our 30-day trial can be downloaded in two ways. @@ -24,56 +24,56 @@ Our 30-day trial can be downloaded in two ways. * Start Trials if using components through [NuGet.org](https://www.nuget.org/packages?q=syncfusion) -### Download Free Trial Setup +### Download the free trial setup -1. You can evaluate our 30-day free trial by visiting the [Download Free Trial](https://www.syncfusion.com/downloads) page and select the product -2. After completing the required form or logging in with your registered Syncfusion® account, you can download the trial installer from the confirmation page. (as shown in below screenshot.) +1. Visit the [Download Free Trial](https://www.syncfusion.com/downloads) page and select the Blazor product. +2. Complete the form or sign in with a registered Syncfusion® account to download the Blazor trial installer from the confirmation page (as shown in below screenshot). - ![Trial and downloads of Syncfusion Blazor](images/trial-confirmation.png) + ![Trial confirmation page showing Blazor Linux installer download](images/trial-confirmation.png) 3. With a trial license, only the latest version’s trial installer can be downloaded. -4. Unlock key is not required to install the Syncfusion® Blazor Linux trial installer. -5. Before the trial expires, you can download the trial installer at any time from your registered account’s [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page (as shown in below screenshot.) +4. An unlock key is not required to install the Syncfusion® Blazor Linux trial installer. +5. Before the trial expires, download the trial installer at any time from the [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page (as shown in below screenshot). - ![Trial and downloads of Syncfusion Blazor](images/trial-download.png) + ![Trials and Downloads page with Download button for the Blazor Linux installer](images/trial-download.png) -6. Click the More Download Options (element 2 in the above screenshot) button to get the Blazor Product Offline trial installer which is available in ZIP format. +6. Select More download options (element 2 in the above screenshot) to get the Essential Studio® Blazor offline trial installer (ZIP format). - ![License and downloads of Syncfusion Blazor](images/start-trial-download-offline-installer.png) + ![Trials and Downloads page showing offline installer download options](images/start-trial-download-offline-installer.png) -### Start Trials if using components through [NuGet.org](https://www.nuget.org/packages?q=syncfusion) +### Start trials if using components through NuGet.org -You should initiate an evaluation if you have already obtained our components through [NuGet.org](https://www.nuget.org/packages?q=syncfusion) +Start an evaluation if components were obtained through [NuGet.org](https://www.nuget.org/packages?q=syncfusion). -1. You can start your 30-day free trial from the [Start Trial](https://www.syncfusion.com/account/manage-trials/start-trials) page from your account. +1. Start a 30‑day Blazor trial from the [Start trial](https://www.syncfusion.com/account/manage-trials/start-trials) page. N> You can generate the license key for your active trial products from [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page. This license key will be mandatory to use our trial products in your application. To know more about License key, refer this [help topic](https://help.syncfusion.com/common/essential-studio/licensing/overview). - - ![Trial and downloads of Syncfusion Blazor](images/start-trial-download.png) + + ![Start trials page for Blazor](images/start-trial-download.png) -2. To access this page, you must sign up\log in with your Syncfusion® account. -3. Begin your trial by selecting the Syncfusion® product. +2. To access this page, sign up or log in with a Syncfusion® account. +3. Begin the trial by selecting the Syncfusion® product. - N> If you've already used the trial products and they haven't expired, you won't be able to start the trial for the same product again. + N> If an existing Blazor trial is still active, a new trial for the same product cannot be started. -4. After you've started the trial, go to the [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page to get the latest version trial installer. You can generate the [unlock key](https://www.syncfusion.com/kb/8069/how-to-generate-unlock-key-for-essentials-studio-products) and [license key](https://help.syncfusion.com/common/essential-studio/licensing/how-to-generate) here at any time before the trial period expires. (as shown in below screenshot.) +4. After starting the trial, go to [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) to get the latest trial installer. You can generate the [unlock key](https://www.syncfusion.com/kb/8069/how-to-generate-unlock-key-for-essentials-studio-products) and [license key](https://help.syncfusion.com/common/essential-studio/licensing/how-to-generate) here at any time before the trial period expires. (as shown in below screenshot.) - ![License and downloads of Syncfusion Blazor](images/start-trial-download-installer.png) + ![Trials and Downloads page showing trial installer and key generation options](images/start-trial-download-installer.png) 5. You can find your current active trial products on the [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page. - -## Download the License Version -1. Syncfusion® licensed products will be available in the [License & Downloads](https://www.syncfusion.com/account/downloads) page under your registered Syncfusion® account. +## Download the licensed version + +1. Licensed products are available from the [License & Downloads](https://www.syncfusion.com/account/downloads) page in the Syncfusion® account. 2. You can view all the licenses (both active and expired) associated with your account. -3. You can download Blazor Linux licensed installer by going to More Downloads Options (element 3 in the screenshot below). +3. Select More download options (element 3 in the screenshot below) to download the Blazor Linux licensed offline installer. - ![License and downloads of Syncfusion Blazor](images/license-download.png) + ![License and Downloads page showing More download options for the Blazor Linux installer](images/license-download.png) -4. Unlock key is not required to install the Syncfusion® Blazor Linux trial installer. -5. For Linux OS, ZIP formats is available for download. +4. An unlock key is not required to install the Syncfusion® Blazor Linux licensed installer. +5. For Linux, the installer is available in ZIP format (offline installer). - ![License and downloads of Syncfusion Blazor](images/Linux_Download.PNG) + ![License and Downloads page listing Blazor Linux ZIP download](images/Linux_Download.PNG) -You can also refer to the [**Blazor Linux installer**](https://blazor.syncfusion.com/documentation/installation/linux-installer/how-to-install) links for step-by-step installation guidelines. +For step-by-step installation, see [Blazor Linux installer](https://blazor.syncfusion.com/documentation/installation/linux-installer/how-to-install). \ No newline at end of file diff --git a/blazor/installation/linux-installer/how-to-install.md b/blazor/installation/linux-installer/how-to-install.md index 8ed5674daa..316f7b5994 100644 --- a/blazor/installation/linux-installer/how-to-install.md +++ b/blazor/installation/linux-installer/how-to-install.md @@ -1,42 +1,40 @@ --- layout: post -title: Installing Syncfusion Blazor Linux installer - Syncfusion -description: Learn here about how to install Syncfusion Blazor linux installer after downloading from our Syncfusion website. +title: Install the Syncfusion Blazor Linux installer | Syncfusion +description: Learn here about how to install the Syncfusion Blazor Linux offline installer (ZIP), review included content, and register license keys in sample projects. platform: Blazor -component: Common +control: Common documentation: ug --- -# Installing Syncfusion® Blazor Linux installer +# Install the Syncfusion® Blazor Linux installer -## Step-by-Step Installation +## Install on Linux -The steps below show how to install Blazor Linux installer. +The steps below show how to install and use the Syncfusion Blazor Linux offline installer (ZIP). -1. Extract the Syncfusion® Blazor Linux installer(.zip) file. The files are extracted in your machine. +N> Prerequisites: Supported Linux distribution, .NET SDK installed, unzip tool, and sufficient disk space. - ![Welcome wizard](images/Linux_Installer1.png) - +1. Extract the Syncfusion® Blazor Linux installer ZIP to a folder. -2. The Linux zip file contains the following folders. + ![Extract the Syncfusion Blazor Linux installer ZIP to a folder](images/Linux_Installer1.png) - ![License Agreement](images/Linux_Installer2.png) - - N> The Unlock key is not required to install the Linux installer. +2. Review the extracted contents. The package includes demo source, offline NuGet packages, and supporting files. + ![Extracted contents of the Blazor Linux offline installer](images/Linux_Installer2.png) -4. You can launch the demo source and use the NuGet packages included in the Linux installer. - +N> An unlock key is not required to install or use the Blazor Linux offline installer. +3. Launch the demo projects from the extracted folder and reference the included NuGet packages as needed. ## License key registration in samples After the installation, the license key is required to register the demo source that is included in the Linux installer. To learn about the steps for license registration for the Blazor Linux installer, please refer to this. -* For server side application register the license key in Configure method of [Startup.cs](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-register-in-an-application#blazor-server-app) -* For client side application register the license key in main method of [Program.cs](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-register-in-an-application#blazor-webassembly-app) +* **Blazor Server App**: Register the license key in Configure method of [Startup.cs](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-register-in-an-application#blazor-server-app) +* **Blazor WASM App**: Register the license key in main method of [Program.cs](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-register-in-an-application#blazor-webassembly-app) You can also find the steps for getting started with Syncfusion® Blazor components in Linux, -* Getting started with Syncfusion® Blazor Components in [Blazor Server Side App](https://blazor.syncfusion.com/documentation/getting-started/blazor-server-side-mac/#getting-started-with-syncfusion-blazor-components-in-blazor-server-side-app-using-visual-studio-for-mac) using Visual Studio for Linux. -* Getting started with Syncfusion® Blazor Components in [Web Assembly App](https://blazor.syncfusion.com/documentation/getting-started/blazor-webassembly-visual-studio-mac/) using Visual Studio for Linux. \ No newline at end of file +* Getting started with Syncfusion® Blazor Components in [Blazor Server Side App](https://blazor.syncfusion.com/documentation/getting-started/blazor-server-side-mac#getting-started-with-syncfusion-blazor-components-in-blazor-server-side-app-using-visual-studio-for-mac) using Visual Studio for Linux. +* Getting started with Syncfusion® Blazor Components in [Web Assembly App](https://blazor.syncfusion.com/documentation/getting-started/blazor-webassembly-visual-studio-mac) using Visual Studio for Linux. \ No newline at end of file diff --git a/blazor/installation/mac-installer/how-to-download.md b/blazor/installation/mac-installer/how-to-download.md index 51286dc7c9..b762c954e0 100644 --- a/blazor/installation/mac-installer/how-to-download.md +++ b/blazor/installation/mac-installer/how-to-download.md @@ -1,73 +1,73 @@ --- layout: post -title: Downloading Syncfusion Blazor Mac installer - Syncfusion -description: Learn here about the how to download Syncfusion Blazor mac installer packages from syncfusion website. +title: Download the Syncfusion Blazor Mac installer - Syncfusion +description: Learn here about how to download the Syncfusion Blazor Mac installer for trial or licensed use, including Start trials and License & Downloads options. platform: Blazor -component: Common +control: Common documentation: ug --- -# Downloading Syncfusion® Blazor Mac installer +# Download the Syncfusion® Blazor Mac installer -Syncfusion® provides Blazor Mac installer for both evaluation and paid customers. You can either download the licensed installer or try our trial installer depending on your license. +Syncfusion® provides a Blazor Mac installer for both evaluation and paid customers. Download options depend on the account status: trial or licensed. * Trial Installer * Licensed Installer -## Download the Trial Version +## Download the trial version -1. You can evaluate our 30-day free trial by visiting the [Download Free Trial](https://www.syncfusion.com/downloads) page and select the Blazor platform. +1. Visit the [Download Free Trial](https://www.syncfusion.com/downloads) page and select the Blazor platform. 2. After completing the required form or logging in with your registered Syncfusion® account, you can download the Blazor trial installer from the confirmation page. (as shown in below screenshot.) - ![Trial Confirmation](images/blazor_mac_trial.PNG) + ![Trial confirmation page showing Blazor Mac installer download](images/blazor_mac_trial.PNG) 3. With a trial license, only the latest version’s trial installer can be downloaded. -4. Unlock key is not required to install the Syncfusion® Blazor Mac trial installer. +4. An unlock key is not required to install the Blazor Mac trial installer. -5. Before the trial expires, you can download the trial installer at any time from your registered account’s [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page (as shown in below screenshot.) +5. Before the trial expires, download the trial installer at any time from the [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page. - ![Start Trial download](images/start-trial-download-installer.png) + ![Trials and Downloads page with Download button for the Blazor Mac installer](images/start-trial-download-installer.png) 6. Click the More Download Options (element 2 in the above screenshot) button to get the Essential Studio® Blazor Offline trial installer which is available in DMG format. ![Trial Downlaod Offline Installer](images/blazor_mac.png) -### Start Trials if using components through NuGet.org +### Start trials if using components through NuGet.org -You should initiate an evaluation if you have already obtained our components through [NuGet.org](https://www.nuget.org/packages?q=syncfusion) +Start an evaluation if components were obtained through [NuGet.org](https://www.nuget.org/packages?q=syncfusion). -1. You can start your 30-day free trial for Blazor from the [Start Trial](https://www.syncfusion.com/account/manage-trials/start-trials) page from your account. +1. Start a 30‑day Blazor trial from the [Start trials](https://www.syncfusion.com/account/manage-trials/start-trials) page. - ![Trial Download](images/start-trial-download.PNG) + ![Start trials page for Blazor](images/start-trial-download.PNG) 2. To access this page, you must sign up/log in with your Syncfusion® account. -3. Begin your trial by selecting the Blazor product. +3. Begin the trial by selecting the Blazor product. - N> If you’ve already used the trial products and they haven’t expired, you won’t be able to start the trial for the same product again. + N> If an existing Blazor trial is still active, a new trial for the same product cannot be started. -4. After you’ve started the trial, go to the [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page to get the latest version trial installer. You can generate the [unlock key](https://support.syncfusion.com/kb/article/7053/how-to-generate-unlock-key-for-essentials-studio-products) and [license key](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-generate) here at any time before the trial period expires. (as shown in below screenshot.) +4. After starting the trial, go to [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) to get the latest trial installer. You can generate the [unlock key](https://support.syncfusion.com/kb/article/7053/how-to-generate-unlock-key-for-essentials-studio-products) and [license key](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-generate) here at any time before the trial period expires. (as shown in below screenshot) - ![Start Trial download](images/start-trial-download-installer.png) + ![Trials and Downloads page showing trial installer and links to generate license key](images/start-trial-download-installer.png) 5. You can find your current active trial products on the [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page. -## Download the License Version +## Download the licensed version -1. Syncfusion® licensed products will be available in the [License & Downloads](https://www.syncfusion.com/account/downloads) page under your registered Syncfusion® account. +1. Licensed products are available from the [License & Downloads](https://www.syncfusion.com/account/downloads) page in the Syncfusion® account. 2. You can view all the licenses (both active and expired) associated with your account. -3. You can download Blazor Mac licensed installer by going to More Downloads Options (element 3 in the screenshot below). +3. Select **More download options** to download the Blazor Mac licensed installer. - ![License Download Installer](images/start-license-download-installer.png) + ![License and Downloads page showing More download options for the Blazor Mac installer](images/start-license-download-installer.png) -4. Unlock key is not required to install the Syncfusion® Blazor Mac trial installer. +4. An unlock key is not required to install the Blazor Mac licensed installer. -5. For Mac OS, DMG formats is available for download. +5. For macOS, the installer is available in DMG format. ![License Download Installer](images/blazor_mac.png) -You can also refer to the [Blazor Mac installation](https://blazor.syncfusion.com/documentation/installation/mac-installer/how-to-install) link for step-by-step installation guidelines. +For step-by-step installation, see [Blazor Mac installation](https://blazor.syncfusion.com/documentation/installation/mac-installer/how-to-install). diff --git a/blazor/installation/mac-installer/how-to-install.md b/blazor/installation/mac-installer/how-to-install.md index 5ab93c587d..bca1381642 100644 --- a/blazor/installation/mac-installer/how-to-install.md +++ b/blazor/installation/mac-installer/how-to-install.md @@ -1,70 +1,71 @@ --- layout: post -title: Installing Syncfusion Blazor Mac installer - Syncfusion -description: Learn here about how to install Syncfusion Blazor mac installer after downloading from our Syncfusion website. +title: Install the Syncfusion Blazor Mac installer - Syncfusion +description: Learn here about how to install the Syncfusion Blazor Mac installer (DMG), handle macOS Gatekeeper prompts, and register license keys in sample projects. platform: Blazor -component: Common +control: Common documentation: ug --- -# Installing Syncfusion® Blazor Mac Installer +# Install the Syncfusion® Blazor Mac installer -The Essential Studio® Blazor Mac installer allows you to create the Blazor application in Visual Studio for Mac with the Syncfusion® Blazor components. +The Essential Studio® Blazor Mac installer installs the Syncfusion Blazor product on macOS (DMG) and integrates with Visual Studio for Mac. The steps below cover Gatekeeper prompts, installation, and license key registration for sample projects. -## Steps to resolve the warning message in Catalina OS or later +## Resolve Gatekeeper warning on macOS Catalina or later - While running Essential Studio® Blazor Mac Installer on Catalina MacOS or later, the below alert will be displayed. + When running the installer on macOS Catalina or later, a Gatekeeper alert may appear. - ![Alert Image](images/Mac_Catalina_MacOS_Alert1.png) + ![macOS Gatekeeper alert for the Syncfusion DMG](images/Mac_Catalina_MacOS_Alert1.png) - If you receive this alert, follow the below steps for the easiest solution. + If this appears, follow these steps: - 1. Right-click the downloaded dmg file. - 2. Select the "Open With" option and choose "DiskImageMounter (Default)". The following pop-up appears. - - ![pop-up Image](images/Mac_Catalina_MacOS_Alert2.png) - - 3. When you click "Open" the installer window will be opened. + 1. Right‑click the downloaded DMG file. + 2. Select Open option and choose **DiskImageMounter (Default)**. The following prompt appears. -## Step-by-Step Installation + ![macOS prompt to open the DMG with DiskImageMounter](images/Mac_Catalina_MacOS_Alert2.png) -The steps below show how to install the Essential Studio® Blazor Mac installer. + 3. Select Open to mount the DMG and continue. -1. Locate the downloaded dmg file and open the file by double click on it. +## Install on macOS - ![Installer Wizard](images/Mac_Installer1.png) +Follow these steps to install the Essential Studio® Blazor Mac installer. -2. This action will automatically mount the disk image and create a virtual drive on your desktop or in the Finder sidebar. +1. Locate the downloaded DMG file and double‑click it to open. - ![Software License Agreement Wizard](images/Mac_Installer2.png) + ![Open the downloaded Syncfusion Blazor DMG](images/Mac_Installer1.png) + +2. The disk image mounts and a virtual drive appears on the desktop or in the Finder sidebar. + + ![Mounted DMG drive visible in Finder](images/Mac_Installer2.png) 3. Copy the mounted disk file. - ![License Agreements Confirmation](images/Mac_Installer3.png) + ![Drag the Syncfusion app to Applications](images/Mac_Installer3.png) - N> The Unlock key is not required to install the Essential Studio® Blazor Mac installer. + N> An unlock key is not required to install the Essential Studio® Blazor Mac installer. -4. And paste it in “Applications” folder shortcut. +4. And paste it in “Applications” folder. - ![Destination select wizard](images/Mac_Installer4.png) + ![Copying the app into the Applications folder](images/Mac_Installer4.png) -5. Now you can open the folder to explore the Syncfusion® Essential Studio® Mac installer. +5. Open the Applications folder and launch the Syncfusion installer app. - ![Installation Type wizard](images/Mac_Installer5.png) + ![Launch the Syncfusion Blazor installer app from Applications](images/Mac_Installer5.png) -6. To remove the DMG file, Right-click on the virtual drive on your desktop or in the Finder sidebar and select “Eject.” Also delete the folder from the Applications. +6. To remove the DMG, right‑click the virtual drive (desktop or Finder sidebar) and select Eject. Also delete the folder from the Applications. - ![Authentication window](images/Mac_Installer6.png) + ![Eject the mounted DMG from Finder](images/Mac_Installer6.png) -## License key registration in samples +## Register the license key in sample projects After the installation, the license key is required to register the demo source that is included in the Mac installer. To learn about the steps for license registration for the Blazor Mac installer, please refer to this. -* For server side application register the license key in Configure method of [Startup.cs](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-register-in-an-application#blazor-server-app) -* For client side application register the license key in main method of [Program.cs](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-register-in-an-application#blazor-webassembly-app) +- **Blazor Server App**: Register the license key in [Startup.cs](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-register-in-an-application#blazor-server-app) +- **Blazor WebAssembly App**: Register the license key in [Program.cs](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-register-in-an-application#blazor-webassembly-app) +For development on macOS, see: You can also find the steps for getting started with Syncfusion® Blazor components in Mac, -* Getting started with Syncfusion® Blazor Components in [Blazor Server Side App](https://blazor.syncfusion.com/documentation/getting-started/blazor-server-side-visual-studio) using Visual Studio for Mac. -* Getting started with Syncfusion® Blazor Components in [Web Assembly App](https://blazor.syncfusion.com/documentation/getting-started/blazor-webassembly-app) using Visual Studio for Mac. \ No newline at end of file +- Getting started with Syncfusion Blazor components in a [Blazor Server App](https://blazor.syncfusion.com/documentation/getting-started/blazor-server-side-mac#getting-started-with-syncfusion-blazor-components-in-blazor-server-side-app-using-visual-studio-for-mac) using Visual Studio for Mac. +- Getting started with Syncfusion Blazor components in a [Blazor WebAssembly App](https://blazor.syncfusion.com/documentation/getting-started/blazor-webassembly-visual-studio-mac) using Visual Studio for Mac. \ No newline at end of file diff --git a/blazor/installation/offline-installer/how-to-download.md b/blazor/installation/offline-installer/how-to-download.md index f840b7ca2d..69763885cf 100644 --- a/blazor/installation/offline-installer/how-to-download.md +++ b/blazor/installation/offline-installer/how-to-download.md @@ -1,78 +1,78 @@ --- layout: post -title: Downloading Syncfusion Blazor installer - Syncfusion -description: Learn here about the how to download Syncfusion Blazor offline installer from our syncfusion website. +title: Download the Syncfusion Blazor offline installer | Syncfusion +description: Learn here about how to download the Syncfusion Blazor offline installer for trial or licensed use, including Start trials and License & Downloads options. platform: Blazor -component: Common +control: Common documentation: ug --- -# Downloading Syncfusion® Blazor offline installer +# Download the Syncfusion® Blazor offline installer -The Syncfusion® Blazor offline installer can be downloaded from the [Syncfusion](https://www.syncfusion.com/blazor-components) website. You can either download the licensed installer or try our trial installer depending on your license. +Download the offline installer from the Syncfusion® website. Download options depend on the account status: trial or licensed. * Trial Installer * Licensed Installer -## Download the Trial Version +## Download the trial version -Our 30-day trial can be downloaded in two ways. +A 30‑day trial can be downloaded in two ways. * Download Free Trial Setup * Start Trials if using components through [NuGet.org](https://www.nuget.org/packages?q=syncfusion) -### Download Free Trial Setup +### Download the free trial setup -1. You can evaluate our 30-day free trial by visiting the [Download Free Trial](https://www.syncfusion.com/downloads) page and select the Blazor platform. +1. Visit the [Download Free Trial](https://www.syncfusion.com/downloads) page and select the Blazor platform. -2. After completing the required form or logging in with your registered Syncfusion® account, you can download the Blazor trial installer from the confirmation page. (as shown in below screenshot.) +2. Complete the form or sign in with a registered Syncfusion® account to download the Blazor trial installer from the confirmation page. - ![Trial Confirmation](images/blazor_windows.PNG) + ![Trial confirmation page showing Blazor offline installer download](images/blazor_windows.PNG) 3. With a trial license, only the latest version’s trial installer can be downloaded. -4. After downloading, the Syncfusion® Blazor trial installer can be unlocked using either the trial unlock key or the Syncfusion® registered login credential. More information on generating an unlock key can be found in [this](https://www.syncfusion.com/kb/8069/how-to-generate-unlock-key-for-essentials-studio-products) article. +4. After downloading, unlock the installer by using either the trial unlock key or by signing in with registered Syncfusion credentials. See [How to generate an unlock key](https://www.syncfusion.com/kb/8069/how-to-generate-unlock-key-for-essentials-studio-products) for more information. -5. Before the trial expires, you can download the trial installer at any time from your registered account’s [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page (as shown in below screenshot.) +5. Before the trial expires, download the trial installer at any time from the [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page. - ![Start Trial download](images/start-trial-download-installer.png) + ![Trials and Downloads page with Download button for the Blazor offline installer](images/start-trial-download-installer.png) -6. Click the More Download Options (element 2 in the above screenshot) button to get the Essential Studio® Blazor Offline trial installer which is available in EXE and ZIP format. +6. Select **More download options** (element 2 in the above screenshot) to get the Essential Studio® Blazor offline trial installer in EXE or ZIP format. ![Trial Downlaod Offline Installer](images/start-trial-download-offline-installer.PNG) -### Start Trials if using components through NuGet.org +### Start trials if using components through NuGet.org -You should initiate an evaluation if you have already obtained our components through [NuGet.org](https://www.nuget.org/packages?q=syncfusion) +Start an evaluation if components were obtained through [NuGet.org](https://www.nuget.org/packages?q=syncfusion). -1. You can start your 30-day free trial for Blazor from the [Start Trial](https://www.syncfusion.com/account/manage-trials/start-trials) page from your account. +1. Start a 30‑day Blazor trial from the [Start trials](https://www.syncfusion.com/account/manage-trials/start-trials) page. - ![Trial Download](images/start-trial-download.PNG) + ![Start trials page for Blazor](images/start-trial-download.PNG) 2. To access this page, you must sign up/log in with your Syncfusion® account. -3. Begin your trial by selecting the Blazor product. +3. Begin the trial by selecting the Blazor product. - N> If you’ve already used the trial products and they haven’t expired, you won’t be able to start the trial for the same product again. + N> If an existing Blazor trial is still active, a new trial for the same product cannot be started. -4. After you’ve started the trial, go to the [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page to get the latest version trial installer. You can generate the [unlock key](https://www.syncfusion.com/kb/8069/how-to-generate-unlock-key-for-essentials-studio-products) and [license key](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-generate) here at any time before the trial period expires. (as shown in below screenshot.) +4. After starting the trial, go to [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page to get the latest trial installer. Generate the installer [unlock key](https://www.syncfusion.com/kb/8069/how-to-generate-unlock-key-for-essentials-studio-products) and the project [license key](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-generate) before the trial period expires. - ![Start Trial download](images/start-trial-download-installer.png) + ![Trials and Downloads page showing trial installer and key generation options](images/start-trial-download-installer.png) 5. You can find your current active trial products on the [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page. -## Download the License Version +## Download the licensed version -1. Syncfusion® licensed products will be available in the [License & Downloads](https://www.syncfusion.com/account/downloads) page under your registered Syncfusion® account. +1. Licensed products are available from the [License & Downloads](https://www.syncfusion.com/account/downloads) page in the Syncfusion account. 2. You can view all the licenses (both active and expired) associated with your account. -3. You can download Blazor licensed offline installer by going to More Downloads Options (element 3 in the screenshot below). +3. Select **More download options** to download the Blazor licensed offline installer. - ![License Download Installer](images/start-license-download-installer.png) + ![License and Downloads page showing More download options for the Blazor offline installer](images/start-license-download-installer.png) -4. For Windows OS, EXE and Zip formats are available for download. They are both Offline Installers. +4. For Windows, EXE and ZIP formats are available for download. Both are offline installers. ![License Download Installer](images/start-trial-download-offline-installer.png) -You can also refer to the [Offline installer](https://blazor.syncfusion.com/documentation/installation/offline-installer/how-to-install) link for step-by-step installation guidelines. +For step-by-step installation, see [Offline installer](https://blazor.syncfusion.com/documentation/installation/offline-installer/how-to-install). diff --git a/blazor/installation/offline-installer/how-to-install.md b/blazor/installation/offline-installer/how-to-install.md index a601c8983d..cc275f52fa 100644 --- a/blazor/installation/offline-installer/how-to-install.md +++ b/blazor/installation/offline-installer/how-to-install.md @@ -1,92 +1,92 @@ --- layout: post -title: Installing Syncfusion Blazor installer - Syncfusion -description: Learn here about the how to install Syncfusion Blazor offline installer after downloading from our syncfusion website. +title: Install the Syncfusion Blazor offline installer | Syncfusion +description: Learn how to install the Syncfusion Blazor offline installer (EXE or ZIP), unlock with a key or account login, and perform silent installs and uninstalls. platform: Blazor -component: Common +control: Common documentation: ug --- -# Installing Syncfusion® Blazor offline installer +# Install the Syncfusion® Blazor offline installer -## Installing with UI +## Install with the user interface -The steps below show how to install the Essential Studio® Blazor installer. +The steps below show how to install the Essential Studio® Blazor offline installer. -1. Open the Syncfusion® Blazor offline installer file from downloaded location by double-clicking it. The Installer Wizard automatically opens and extracts the package +1. Open the Syncfusion® Blazor offline installer file(.exe) from the download location by double‑clicking it. The installer wizard opens and extracts the package. - ![Web Offline Installer Setup wizard](images/webofflineinstaller-1.png) + ![Offline installer setup extracting package](images/webofflineinstaller-1.png) - N> The Installer wizard extracts the syncfusionessentialblazor_(version).exe dialog, which displays the package’s unzip operation. + N> The installer extracts syncfusionessentialblazor_(version).exe and displays the extraction progress(unzip operation). -2. To unlock the Syncfusion® offline installer, you have two options: +2. To unlock the offline installer, choose one of the following options: * *Login To Install* * *Use Unlock Key* - **Login To Install:** + **Login to install:** - You must enter your Syncfusion® email address and password. If you don’t already have a Syncfusion® account, you can sign up for one by clicking "**Create an account**". If you have forgotten your password, click on "**Forgot Password**" to create a new one. Once you’ve entered your Syncfusion® email and password, click Next. + Enter the Syncfusion® account email address and password. If you don’t already have a Syncfusion® account, you can sign up for one by clicking "**Create an account**". If you have forgotten your password, click on "**Forgot Password**" to create a new one. Once you’ve entered your Syncfusion® email and password, click Next. - ![Web Offline Installer LoginToInstall Wizard](images/webofflineinstaller-2.png) + ![Offline installer Login to install wizard](images/webofflineinstaller-2.png) - **Use Unlock Key:** + **Use unlock key:** - Unlock keys are used to unlock the Syncfusion® offline installer, and they are platform and version specific. You should use either Syncfusion® licensed or trial Unlock key to unlock Syncfusion® Blazor installer. + Unlock keys unlock the Syncfusion® offline installer, and they are platform and version specific. You should use either Syncfusion® licensed or trial Unlock key to unlock Syncfusion® Blazor installer. - The trial unlock key is only valid for 30 days, and the installer will not accept an expired trial key. + The trial unlock key is valid for 30 days; expired keys are not accepted. To learn how to generate an unlock key for both trial and licensed products, see [this](https://www.syncfusion.com/kb/2326) Knowledge Base article. - ![Web Offline Installer UseUnlockKey Wizard](images/webofflineinstaller-3.png) + ![Offline installer Use unlock key wizard](images/webofflineinstaller-3.png) -3. After reading the License Terms and Privacy Policy, check the "**I agree to the License Terms and Privacy Policy**" check box. Click the Next button. +3. Read the License Terms and Privacy Policy, then select **I agree to the License Terms and Privacy Policy**. Select **Next**. -4. Change the install and sample locations here. You can also change the Additional settings. Click Next/Install to install with the default settings. +4. Change the install and sample locations as needed. Adjust additional settings if required. Select **Next** or **Install** to continue with defaults. - ![Web Offline Installer Settings Wizard](images/webofflineinstaller-4.png) + ![Offline installer Settings wizard with install locations and options](images/webofflineinstaller-4.png) - ***Additional Settings*** + ***Additional settings*** - * Select the **Install Demos** check box to install Syncfusion® samples, or leave the check box unchecked, if you do not want to install Syncfusion® samples. + * Select **Install demos** to install Syncfusion® samples, or clear it to skip sample installation. - * Select the **Configure Syncfusion® Extensions controls in Visual Studio** checkbox to configure the Syncfusion® Extensions in Visual Studio or clear this check box when you do not want to configure the Syncfusion® Extensions in Visual Studio. + * Select **Configure Syncfusion Extensions controls in Visual Studio** to configure extensions, or clear it to skip configuration. - * Check the **Create Desktop Shortcut** checkbox to add a desktop shortcut for Syncfusion® Control Panel. + * Select **Create Desktop Shortcut** to add a shortcut for Syncfusion® Control Panel. - * Check the **Create Start Menu Shortcut** checkbox to add a shortcut to the start menu for Syncfusion® Control Panel. + * Select **Create Start menu shortcut** to add a shortcut to the Start menu entry for Syncfusion® Control Panel. -5. If any previous versions of the current product is installed, the Uninstall Previous Version(s) wizard will be opened. Select **Uninstall** checkbox to uninstall the previous versions and then click the Proceed button. +5. If previous versions of the current product is installed, the Uninstall previous versions wizard opens. Select **Uninstall** to remove the previous versions, then select **Proceed**. - ![Web Offline Installer Uninstall Previous Wizard](images/webofflineinstaller-5.png) + ![Offline installer Uninstall previous versions wizard](images/webofflineinstaller-5.png) N> From the 2021 Volume 1 release, Syncfusion® has added the option to uninstall previous versions from 18.1 while installing the new version.

If any version is selected to uninstall, a confirmation screen will appear; if continue is selected, the Progress screen will display the uninstall and install progress, respectively. If none of the versions are chosen to be uninstalled, only the installation progress will be displayed. - **Confirmation Alert:** + **Confirmation alert:** ![Web Offline Installer Confirmation Alert](images/webofflineinstaller-6.png) - **Uninstall Progress:** + **Uninstall progress:** ![Web Offline Installer Uninstall Progress Wizard](images/webofflineinstaller-7.png) - ***Install Progress*** + ***Install progress*** ![Web Offline Installer Progress Wizard](images/webofflineinstaller-8.png) - N> The Completed screen is displayed once the Blazor product is installed. If any version is selected to uninstall, The completed screen will display both install and uninstall status. + N> The Completed screen appears after installation. If versions were uninstalled, it shows both uninstall and install status. ![Web Offline Installer Summary Wizard](images/webofflineinstaller-9.png) -6. After installing, click the **Launch Control Panel** link to open the Syncfusion® Control Panel. +6. After installation, select **Launch Control Panel** to open the Syncfusion® Control Panel. -7. Click the Finish button. Your system has been installed with the Syncfusion® Essential Studio® Blazor product. +7. Select **Finish**. The Syncfusion® Essential Studio® Blazor product is installed. -## Installing in Silent Mode +## Install in silent mode -The Syncfusion® Essential Studio® Blazor Installer supports installation and uninstallation via the command line. +The Syncfusion® Essential Studio® Blazor installer supports installation and uninstallation via the command line. -***Command Line Installation*** +***Command-line installation*** To install through the Command Line in Silent mode, follow the steps below. @@ -100,7 +100,7 @@ To install through the Command Line in Silent mode, follow the steps below. 5. Exit the Wizard. -6. Run Command Prompt in administrator mode and enter the following arguments. +6. Open Command Prompt as administrator and run the installer with arguments: **Arguments:** "installer file path\SyncfusionEssentialStudio(product)_(version).exe" /Install silent /UNLOCKKEY:"(product unlock key)" [/ log "{Log file path}"] [/InstallPath:{Location to install}] [/InstallSamples:{true/false}] [/CreateShortcut:{true/false}] [/ CreateStartMenuShortcut:{true/false}] @@ -112,7 +112,7 @@ To install through the Command Line in Silent mode, follow the steps below. N> x.x.x.x should be replaced with the Essential Studio® version and the Product Unlock Key needs to be replaced with the Unlock Key for that version. -## Command Line Uninstallation +## Command-line uninstallation Syncfusion® Essential® Blazor can be uninstalled silently using the Command Line. diff --git a/blazor/installation/web-installer/how-to-download.md b/blazor/installation/web-installer/how-to-download.md index 08242ceb04..5141e8f2a1 100644 --- a/blazor/installation/web-installer/how-to-download.md +++ b/blazor/installation/web-installer/how-to-download.md @@ -1,78 +1,78 @@ --- layout: post -title: Downloading Syncfusion Blazor web installer - Syncfusion -description: Learn here about the how to download Syncfusion Blazor web installer from our syncfusion website with license. +title: Download the Syncfusion Blazor web installer - Syncfusion +description: Learn how to download the Blazor web installer for trial or licensed use from your Syncfusion account, including links to Start trials and License & Downloads. platform: Blazor -component: Common +control: Common documentation: ug --- -# Downloading Syncfusion® Blazor web installer +# Download the Syncfusion® Blazor web installer -Syncfusion® Blazor web installer can be downloaded from our [Syncfusion](https://www.syncfusion.com/blazor-components) website. You can either download the licensed installer or try our trial installer depending on your license. +Download the Syncfusion® Blazor web installer from the [Syncfusion® website](https://www.syncfusion.com/blazor-components). Download options depend on the account status: trial or licensed. * Trial Installer * Licensed Installer -## Download Free Trial Version +## Download the free trial version -Our 30-day trial can be downloaded in two ways. +A 30‑day trial can be downloaded in two ways. * Download Free Trial Setup * Start Trials if using components through [NuGet.org](https://www.nuget.org/packages?q=syncfusion) -### Download Free Trial Setup +### Download the free trial setup -1. You can evaluate our 30-day free trial by visiting the [Download Free Trial](https://www.syncfusion.com/downloads) page and select the Blazor platform. +1. Visit the [Download Free Trial](https://www.syncfusion.com/downloads) page and select the Blazor platform. 2. After completing the required form or logging in with your registered Syncfusion® account, you can download the Blazor trial installer from the confirmation page. (as shown in below screenshot.) - ![Trial Confirmation](images/blazor-web-trial.png) + ![Trial confirmation page showing the Blazor trial installer download](images/blazor-web-trial.png) -3. After downloading, the Syncfusion® Blazor web installer can be unlocked using Syncfusion® registered login credential. +3. After downloading, unlock the Blazor web installer by signing in with the registered Syncfusion credentials. 4. Before the trial license expires, you can download the blazor installer at any time from your registered account’s [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page (as shown in below screenshot.) -5. Click the Download (element 1 in the screenshot below) button to download the blazor web installer. +5. Click Download to get the Blazor web installer. - ![Trial Downlaod Online Installer](images/start-trial-download-installer-1.png) + ![Trials and Downloads page with Download button for the Blazor web installer](images/start-trial-download-installer-1.png) -### Start Trials if using components through NuGet.org +### Start trials if using components through NuGet.org -You should initiate an evaluation if you have already obtained our components through [NuGet.org](https://www.nuget.org/packages?q=syncfusion) +Start an evaluation if components were obtained through [NuGet.org](https://www.nuget.org/packages?q=syncfusion). -1. You can start your 30-day free trial for Blazor from the [Start Trial](https://www.syncfusion.com/account/manage-trials/start-trials) page from your account. +1. Start a 30‑day Blazor trial from the [Start trials](https://www.syncfusion.com/account/manage-trials/start-trials) page. - ![Trial Download](images/start-trial-download.png) + ![Start trials page for Blazor](images/start-trial-download.png) 2. To access this page, you must sign up/log in with your Syncfusion® account. -3. Begin your trial by selecting the Blazor product. +3. Begin the trial by selecting the Blazor product. - N> If you’ve already used the trial products and they haven’t expired, you won’t be able to start the trial for the same product again. + N> If an existing Blazor trial is still active, a new trial for the same product cannot be started. -4. After you’ve started the trial, go to the [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page to get the latest version trial installer. You can generate the [unlock key](https://support.syncfusion.com/kb/article/7053/how-to-generate-unlock-key-for-essentials-studio-products) and [license key](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-generate) here at any time before the trial period expires. (as shown in below screenshot.) +4. After starting the trial, go to [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) to get the latest trial installer. Generate the installer [unlock key](https://support.syncfusion.com/kb/article/7053/how-to-generate-unlock-key-for-essentials-studio-products) and the project [license key](https://blazor.syncfusion.com/documentation/getting-started/license-key/how-to-generate) before the trial period expires. - ![Start Trial download](images/start-trial-download-installer.png) + ![Trials and Downloads page showing trial installer and key generation options](images/start-trial-download-installer.png) 5. You can find your current active trial products on the [Trials & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page. -## Download the Licensed Version +## Download the licensed version -1. Syncfusion® licensed products will be available in the [License & Downloads](https://www.syncfusion.com/account/downloads) page under your registered Syncfusion® account. +1. Licensed products are available from the [License & Downloads](https://www.syncfusion.com/account/downloads) page in the registered Syncfusion® account. 2. You can view all the licenses (both active and expired) associated with your account. -3. Click the Download (element 1 in the screenshot below) button to download the blazor web installer. +3. Click Download to get the Blazor web installer. - ![License Download Installer](images/blazor-license-download-installer.png) + ![License and Downloads page with Download button for the Blazor web installer](images/blazor-license-download-installer.png) 4. Before the license expires, you can download the installer at any time from your registered account’s [License & Downloads](https://www.syncfusion.com/account/downloads) page (See the screenshot below.) - ![License Download Installer](images/blazor-web-installer-license.png) + ![License and Downloads page listing available Blazor installer versions](images/blazor-web-installer-license.png) -5. After downloading, the Syncfusion® Blazor web installer can be unlocked using Syncfusion® registered login credential. +5. After downloading, unlock the web installer by signing in with registered Syncfusion® credentials. N> For Syncfusion® trial and licensed products, there is no separate web installer. Based on your account license, Syncfusion® trial or licensed products will be installed via web installer. -You can also refer to the [web installer](https://blazor.syncfusion.com/documentation/installation/web-installer/how-to-install) links for step-by-step installation guidelines. +For step-by-step installation, see Web installer: https://blazor.syncfusion.com/documentation/installation/web-installer/how-to-install diff --git a/blazor/installation/web-installer/how-to-install.md b/blazor/installation/web-installer/how-to-install.md index b243e85ede..cc76283dcc 100644 --- a/blazor/installation/web-installer/how-to-install.md +++ b/blazor/installation/web-installer/how-to-install.md @@ -1,89 +1,89 @@ --- layout: post -title: Installing Syncfusion Blazor web installer - Syncfusion -description: Learn here about how to install Syncfusion Blazor web installer after downloading from our Syncfusion website. +title: Install the Syncfusion Blazor web installer | Syncfusion +description: Learn here about how to install the Syncfusion Blazor web installer, configure products, and manage the uninstall options. Explore here to more details. platform: Blazor -component: Common +control: Common documentation: ug --- -# Installing Syncfusion® Blazor web installer +# Install the Syncfusion® Blazor web installer ## Installation -The steps below show how to install Essential Studio® Blazor Web Installer. +The steps below show how to install the Essential Studio® Blazor web installer. -1. Open the Syncfusion® Essential Studio® Blazor Web Installer file from downloaded location by double-clicking it. The Installer Wizard automatically opens and extracts the package. +1. Open the Syncfusion® Essential Studio® Blazor web installer (.exe) from the download location by double‑clicking it. The installer wizard opens and extracts the package. - ![Web Installer Setup](images/webinstaller-1.png) + ![Web installer setup extracting package](images/webinstaller-1.png) - N> The installer wizard extracts the syncfusionessentialblazorwebinstaller_{version}.exe dialog, which displays the package’s unzip operation. + N> The installer extracts syncfusionessentialblazorwebinstaller_{version}.exe and displays the extraction progress. -2. The Syncfusion® Blazor Web Installer’s ***welcome wizard*** will be displayed. Click the Next button. +2. The Syncfusion® Blazor Web Installer’s ***welcome wizard*** will be displayed. Click **Next** button. ![Web Installer welcome wizard](images/webinstaller-2.png) -3. The ***Platform Selection Wizard*** will appear. From the **Available** tab, select the products to be installed. Select the **Install All** checkbox to install all products. +3. The ***Platform selection wizard*** appears. On the **Available** tab, select the products to install. To install all products, click **Install All**. ***Available*** - ![Web Installer Available Tab](images/webinstaller-3.png) + ![Platform selection wizard Available tab](images/webinstaller-3.png) - If you have multiple products installed in the same version, they will be listed under the **Installed** tab. You can also select which products to uninstall from the same version. Click the Next button. + If multiple products are already installed for the same version, they are listed under the **Installed** tab. You can also select products to uninstall from that version. Click **Next**. ***Installed*** - ![Web Installer Installed Tab](images/webinstaller-4.png) + ![Platform selection wizard Installed tab](images/webinstaller-4.png) - I> If the required software for the selected product isn’t already installed, the **Additional Software Required** alert will appear. You can, however, continue the installation and install the necessary software later. + I> If required software for a selected product is missing, an **Additional Software Required** alert appears. You can, however, continue the installation and install the necessary software later. ***Required Software*** ![Web Installer Required Software Alert](images/webinstaller-5.png) -4. If previous version(s) for the selected products are installed, the ***Uninstall previous version wizard*** will be displayed. You can see the list of previously installed versions for the products you’ve chosen here. To remove all versions, check the **Uninstall All** checkbox. Click the Next button. +4. If previous versions of selected products are detected, the Uninstall previous versions wizard is displayed. Review the list and select **Uninstall All** to remove all prior versions. Click **Next**. ![Web Installer Uninstall Previous Wizard](images/webinstaller-6.png) N> From the 2021 Volume 1 release, Syncfusion® has provided option to uninstall the previous versions from 18.1 while installing the new version. -5. Pop up screen will be displayed to get the confirmation to uninstall selected previous versions. +5. A confirmation dialog is shown to uninstall the selected previous versions. ![Web Installer Uninstall Previous confirmation](images/webinstaller-7.png) -6. The ***Confirmation Wizard*** will appear with the list of products to be installed/uninstalled. You can view and modify the list of products that will be installed and uninstalled from this page. +6. The ***Confirmation wizard*** lists products to be installed or uninstalled. Review and modify the list as needed. ![Web Installer Product install/uninstall list](images/webinstaller-8.png) - N> By clicking the **Download Size and Installation** Size links, you can determine the approximate size of the download and installation + N> Click the **Download size** and **Installation size** links to view approximate sizes. -7. The ***Configuration Wizard*** will appear. You can change the Download, Install, and Demos locations from here. You can also change the Additional settings on a product-by-product basis. Click Next to install with the default settings. +7. The ***Configuration Wizard*** will appear. You can change the Download, Install, and Demos locations from here. You can also change the Additional settings on a product-by-product basis. Click **Next** to install with the default settings. ![Web Installer Configuration Wizard](images/webinstaller-9.png) ***Additional settings*** - * Select the **Install Demos** check box to install Syncfusion® samples, or leave the check box unchecked, if you do not want to install Syncfusion® samples. + * Select **Install demos** to install Syncfusion samples, or clear it to skip sample installation. - * Select the **Configure Syncfusion® Extensions controls in Visual Studio** checkbox to configure the Syncfusion® Extensions in Visual Studio or clear this check box when you do not want to configure the Syncfusion® Extensions in Visual Studio. + * Select **Configure Syncfusion extensions in Visual Studio** to configure extensions, or clear it to skip configuration. - * Check the **Create Desktop Shortcut** checkbox to add a desktop shortcut for Syncfusion® Control Panel. + * Select **Create Desktop Shortcut** to add a shortcut for Syncfusion® Control Panel. - * Check the **Create Start Menu Shortcut** checkbox to add a shortcut to the start menu for Syncfusion® Control Panel. + * Select **Create Start Menu Shortcut** to add a shortcut to the Start menu entry for Syncfusion® Control Panel. -8. After reading the License Terms and Conditions, check the **I agree to the License Terms and Privacy Policy** check box. Click the Next button. +8. Read the License Terms and Privacy Policy, then select **I agree to the License Terms and Privacy Policy**. Click **Next**. -9. The login wizard will appear. You must enter your Syncfusion® email address and password. If you do not already have a Syncfusion® account, you can create one by clicking on **Create an Account**. If you have forgotten your password, click **Forgot Password** to create a new one. Click the Install button. +9. The Login wizard appears. Enter the Syncfusion account email and password. To create an account, select **Create an account**. To reset a password, select **Forgot password**. Click **Install**. ![Web Installer Login Wizard](images/webinstaller-10.png) - I> The products you have chosen will be installed based on your Syncfusion® License (Trial or Licensed). + I> Products are installed based on your syncfusion® license (trial or licensed). -10. The download and installation/uninstallation progress will be displayed as shown below. - ![Web Installer Installation Wizard](images/webinstaller-11.png) +10. The download, installation, and uninstallation progress is displayed. + ![Installation progress showing download and install status](images/webinstaller-11.png) To open the Syncfusion® Control Panel, click **Launch Control Panel**. -11. When the installation is finished, the ***Summary wizard*** will appear. Here you can see the list of products that have been installed successfully and those that have failed. To close the Summary wizard, click Finish. +11. When the installation is finished, the ***Summary wizard*** will appear. Here you can see the list of products that have been installed successfully and those that have failed. To close the Summary wizard, click **Finish**. ![Web Installer Installation Summary](images/webinstaller-12.png) @@ -93,21 +93,21 @@ The steps below show how to install Essential Studio& ## Uninstallation -Syncfusion® Blazor installer can be uninstalled in two ways. +Syncfusion® Blazor can be uninstalled in two ways. -* Uninstall the Blazor using the Syncfusion® Blazor web installer +* Uninstall using the Syncfusion® Blazor web installer -* Uninstall the Blazor from Windows Control Panel +* Uninstall from Windows Control Panel -Follow either one of the option below to uninstall Syncfusion® Essential Studio® Blazor installer, +Follow one of the options below to uninstall the Syncfusion® Essential Studio® Blazor installer. -**Option 1:** ***Uninstall the Blazor using the Syncfusion® Blazor web installer*** +**Option 1:** Uninstall using the Syncfusion® Blazor web installer Syncfusion® provides the option to uninstall products of the same version directly from the Web Installer application. Open the Syncfusion® Essential Studio® Blazor Online Installer file from downloaded location by double-clicking it. Select the products to be uninstalled from the list, and Web Installer will uninstall them one by one. ![Web Installer Installed Products Uninstall](images/webinstaller-uninstall-2.png) -**Option 2:** ***Uninstall the Blazor from Windows Control Panel*** +**Option 2:** Uninstall from Windows Control Panel You can uninstall all the installed products by selecting the **Syncfusion® Essential Studio® {version}** entry (element 1 in the below screenshot) from the Windows control panel, or you can uninstall Blazor alone by selecting the **Syncfusion® Essential Studio® for Blazor {version}** entry (element 2 in the below screenshot) from the Windows control panel. @@ -115,54 +115,54 @@ You can uninstall all the installed products by selecting the **Syncfusion If the **Syncfusion® Essential Studio® for Blazor {version}** entry is selected from the Windows control panel, the Syncfusion® Essential Studio® Blazor alone will be removed and the below default MSI uninstallation window will be displayed. -1. The Syncfusion® Blazor Web Installer’s ***welcome wizard*** will be displayed. Click the Next button +1. The Blazor web installer **Welcome wizard** is displayed. Click **Next**. ![Web Installer welcome wizard](images/webinstaller-2.png) -2. The ***Platform Selection Wizard*** will appear. From the **Installed** tab, select the products to be uninstalled. To select all products, check the **Uninstall All** checkbox. Click the Next button. +2. The **Platform selection wizard** appears. On the **Installed** tab, select products to uninstall. To uninstall all, select **Uninstall All**. Click **Next**. ***Installed*** ![Web Installer Installed Products Uninstall](images/webinstaller-uninstall-2.png) - You can also select the products to be installed from the **Available** tab. Click the Next button. + You can also select products to install from the **Available** tab. Click **Next**. ***Available*** ![Web Installer Uninstall Available Tab](images/webinstaller-uninstall-3.png) -3. If any other products are selected for installation, ***Uninstall previous version wizard*** will be displayed with previous version(s) installed for the selected products. Here you can view the list of installed previous versions for the selected products. Select **Uninstall All** checkbox to select all the versions. Click Next. +3. If other products are selected for installation, the ***Uninstall previous versions wizard*** shows any installed previous versions for those products. Select **Uninstall All** to remove all versions. Click **Next**. ![Web Installer Uninstall Previous version Wizard](images/webinstaller-uninstall-4.png) -4. Pop up screen will be displayed to get the confirmation to uninstall selected previous versions. +4. A confirmation dialog is shown to uninstall the selected previous versions. ![Web Installer Uninstall Previous confirmation](images/webinstaller-7.png) -5. The ***Confirmation Wizard*** will appear with the list of products to be installed/uninstalled. Here you can view and modify the list of products that will be installed/uninstalled. +5. The **Confirmation Wizard** lists products to be installed or uninstalled. Review and modify as needed. ![Web Installer Product Install/Uninstall Wizard](images/webinstaller-uninstall-5.png) N> By clicking the **Download Size and Installation** Size links, you can determine the approximate size of the download and installation. -6. The ***Configuration Wizard*** will appear. You can change the Download, Install, and Demos locations from here. You can also change the Additional settings on a product-by-product basis. Click Next to install with the default settings. +6. The ***Configuration Wizard*** will appear. You can change the Download, Install, and Demos locations from here. You can also change the Additional settings on a product-by-product basis. Click **Next** to install with the default settings. ![Web Installer Uninstall Configuration Wizard](images/webinstaller-uninstall-6.png) -7. After reading the License Terms and Conditions, check the **I agree to the License Terms and Privacy Policy** check box. Click the Next button. +7. Read the License Terms and Privacy Policy, then select **I agree to the License Terms and Privacy Policy**. Select **Next**. -8. The ***login wizard*** will appear. You must enter your Syncfusion® email address and password. If you do not already have a Syncfusion® account, you can create one by clicking on **Create an Account**. If you have forgotten your password, click **Forgot Password** to create a new one. Click the Install button. +8. The **Login Wizard** appears. Enter the Syncfusion® account email and password, or select **Create an account** or **Forgot password**. Click **Install**. ![Web Installer Login Wizard](images/webinstaller-10.png) I> The products you have chosen will be installed based on your Syncfusion® License (Trial or Licensed). -9. The download, installation, and uninstallation progresses will be shown. +9. The download, installation, and uninstallation progress is shown. ![Web Installer Uninstallation Wizard](images/webinstaller-uninstall-7.png) -10. When the installation is finished, the ***Summary wizard*** will appear. Here you can see the list of products that have been successfully and unsuccessfully installed/uninstalled. To close the Summary wizard, click Finish. +10. When the installation is finished, the ***Summary wizard*** will appear. Here you can see the list of products that have been successfully and unsuccessfully installed/uninstalled. To close the Summary wizard, click **Finish**. ![Web Installer Uninstallation Summary](images/webinstaller-uninstall-8.png) -* To open the Syncfusion® Control Panel, click **Launch Control Panel**. \ No newline at end of file +* To open the Syncfusion® Control Panel, click **Launch Control Panel**. diff --git a/blazor/tutorials/build-a-blazor-stay-reservation-app.md b/blazor/tutorials/build-a-blazor-stay-reservation-app.md index 35af0a6759..6b48fb8645 100644 --- a/blazor/tutorials/build-a-blazor-stay-reservation-app.md +++ b/blazor/tutorials/build-a-blazor-stay-reservation-app.md @@ -1,24 +1,24 @@ --- layout: post -title: Build a Blazor Stay Reservation App - Syncfusion -description: Step by step tutorial to build a Blazor Stay Reservation Application using Syncfusion Blazor components. +title: Build a Blazor stay reservation app - Syncfusion +description: Learn here about step-by-step tutorial to build a Blazor stay reservation application using Syncfusion Blazor components like Scheduler, Sidebar, and Toast. platform: Blazor -component: Tutorials +control: Tutorials documentation: ug --- -# Build a Blazor Stay Reservation App with Syncfusion® Blazor Components +# Build a Blazor stay reservation app with Syncfusion® Blazor components -In this tutorial, we'll walk through the process of building a "Stay Reservation" application. This demonstrates how to use the **Syncfusion® Blazor Scheduler** component as the centerpiece of a booking system, complete with filtering, booking form and a responsive layout. +This tutorial explains how to build a stay reservation application. It demonstrates how to use the **Syncfusion® Blazor Scheduler** component as the centerpiece of a booking system, with filtering, a booking form, and a responsive layout. + +By the end of this tutorial, the reader will be able to: +* Set up a Blazor project with Syncfusion® components. +* Configure the Blazor Scheduler for a reservation system. +* Manage application state using a dependency-injected service. +* Build a filterable sidebar with checkboxes and accordions. +* Combine multiple components to create a polished application. -By the end of this tutorial, you will have learned how to: -* Set up a Blazor project with Syncfusion® components. -* Configure the Blazor Scheduler for a reservation system. -* Manage application state using a dependency-injected service. -* Build a filterable sidebar with Checkboxes and Accordions. -* Combine multiple components to create a polished, final application. -Let's get started! ## Prerequisites @@ -26,18 +26,18 @@ Let's get started! ## Create the Blazor Web App -First, let's create a new Blazor Web App. +Create a new Blazor Web App. ```bash dotnet new blazor -o StayReservation cd StayReservation ``` -Choose the "Blazor Web App" template. For this project, we'll use the **Interactive Server** render mode for simplicity. +Choose the "Blazor Web App" template. For this project, use the **Interactive Server** render mode for simplicity. -## Add and Configure Syncfusion® Blazor Components +## Add and configure Syncfusion® Blazor components -Next, we need to add the Syncfusion® Blazor libraries to our project. We'll need packages for the Scheduler, navigation elements (like the Sidebar and Accordion), and various input components. +Next, add the Syncfusion® Blazor libraries to the project. Packages are required for the Scheduler, navigation elements (such as Sidebar and Accordion), and input components. Install the essential Syncfusion® Blazor NuGet packages: @@ -47,20 +47,20 @@ dotnet add package Syncfusion.Blazor.Notifications dotnet add package Syncfusion.Blazor.Themes ``` -Now, let's configure the app to recognize and style the Syncfusion® components. +Configure the app to recognize and style the Syncfusion® components. -1. **Register Syncfusion® Services** +1. **Register Syncfusion® services** - In your `Program.cs` file, register the Syncfusion® Blazor service. + In `Program.cs`, register the Syncfusion® Blazor service. ```csharp // Add the following line before builder.Build() builder.Services.AddSyncfusionBlazor(); ``` -2. **Add Theme and Script References** +2. **Add theme and script references** - Open `Components/App.razor`. We need to add the Syncfusion® theme stylesheet and the necessary script reference for component interactivity. We'll use the modern `tailwind.css` theme. + Open `Components/App.razor`. Add the Syncfusion® theme stylesheet and the script reference for component interactivity. The example uses the `tailwind.css` theme. ```html @@ -86,9 +86,9 @@ Now, let's configure the app to recognize and style the Syncfusion® namespaces to your `_Imports.razor` file. + To avoid adding `@using` directives in each component, add the commonly used Syncfusion® namespaces to the `_Imports.razor` file. ```csharp @using StayReservation @@ -101,7 +101,9 @@ Now, let's configure the app to recognize and style the Syncfusion`: We define our "Floors" resource. This maps the `FloorId` field in our `AppointmentData` to the `FloorId` in our `floorData` list, automatically assigning colors and text to the resource groups headers. -* ``: We use templates to customize the date header, cell, and resource header. +* ``: Binds the scheduler's events to the list in `AppointmentService`. +* ``: Groups by the resource named "Floors". +* ``: Defines the "Floors" resource. This maps the `FloorId` field in `AppointmentData` to the `FloorId` in the `floorData` list, assigning colors and text to resource group headers. +* ``: Uses templates to customize the date header, cell, and resource header. ## Assemble the Main Page -Now, let's bring it all together in the main `Index.razor` page. This component will host the sidebar and the schedule, along with a header to control the UI. +Bring it together in the main `Index.razor` page. This component hosts the sidebar and the schedule, along with a header to control the UI. Update `Components/Pages/Index.razor` with the following code: @@ -346,11 +347,11 @@ Update `Components/Pages/Index.razor` with the following code: ``` -## Implement the Filtering Logic +## Implement the filtering logic -We need to connect the checkboxes in the sidebar to the data displayed in the scheduler. Since we're using our `AppointmentService` to hold the state, we can detect changes to the checkbox values and re-filter the scheduler's resource data. Can bind the change event to checkbox and sliders to form the filter query and update the resource data. +Connect the checkboxes in the sidebar to the data displayed in the scheduler. Since `AppointmentService` holds the state, detect changes to the checkbox and slider values, form the filter query, and update the resource data. -Refer the following code to implement the filtering logic in `Components/Pages/Sidebar.razor`: +Use the following code to implement the filtering logic in `Components/Pages/Sidebar.razor`: The complete code for `Sidebar.razor` is available in the GitHub repository at the following link: [`Sidebar.razor`](https://github.com/syncfusion/blazor-showcase-stay-reservation/blob/master/webapp/Stay-Reservation/Components/Pages/Sidebar.razor). You may reuse the full code as needed. @@ -425,16 +426,16 @@ The complete code for `Sidebar.razor` is available in the GitHub repository at t } ``` -Now, whenever a user clicks a checkbox, it triggers the `OnChange` event, which calls the `FloorHandler` method. This method updates the `ResourceQuery` property on the `Service` object, which is used to filter the resources in the scheduler. The `StateChanged` method is called to refresh the scheduler with the new resource data. +When a user clicks a checkbox, it triggers the `OnChange` event, which calls the `FloorHandler` method. This method updates the `ResourceQuery` property on the `Service` object to filter resources in the scheduler. The `StateChanged` method refreshes the scheduler with the new resource data. -Build and run the app by executing the `dotnet watch run`command in the command shell from the `StayReservation` folder. +Build and run the app by executing the `dotnet watch run` command in the command shell from the `StayReservation` folder. -## Implement the Appointment Booking form -Bind the Scheduler's Editor Template to a custom form for creating and editing appointments. This form will include fields for the appointment's subject, start and end times, and a dropdown list for selecting the room. The form will be displayed when a user double clicks on an empty cell in the scheduler or on an existing appointment. The form will be displayed in a popup window. +## Implement the appointment booking form +Bind the Scheduler's Editor Template to a custom form for creating and editing appointments. This form includes fields for the appointment subject, start and end times, and a drop-down list for selecting the room. The form is displayed when a user double-clicks an empty cell in the scheduler or an existing appointment, in a popup window. -We can validate the form fields using the `ValidationMessage` component. The `ValidationMessage` component displays an error message when the validation fails. The `ValidationMessage` component is bound to the `Subject` property of the `AppointmentData` object. The `Subject` property is required, so the `ValidationMessage` component displays an error message when the `Subject` property is empty. +Validate the form fields using the `ValidationMessage` component. The `ValidationMessage` component displays an error message when validation fails. It is bound to the `Subject` property of the `AppointmentData` object, which is required, so an error message appears when the `Subject` property is empty. -We can apply the following code to the `Schedule.razor` file to create the custom form. +Apply the following code to the `Schedule.razor` file to create the custom form. ```html @@ -555,11 +556,11 @@ We can apply the following code to the `Schedule.razor` file to create the custo ``` -More details about editor template can be found in the [Editor Template](https://blazor.syncfusion.com/documentation/scheduler/editor-template#customizing-event-editor-using-template) documentation. +More details about the editor template are available in the [Editor Template](https://blazor.syncfusion.com/documentation/scheduler/editor-template#customizing-event-editor-using-template) documentation. -## Adding Toast Notifications +## Add toast notifications -Integrate `SfToast` for user notifications throughout the application. When a user creates or deletes a reservation, a toast notification will appear. +Integrate `SfToast` for user notifications throughout the application. When a user creates or deletes a reservation, a toast notification appears. ```csharp @@ -567,7 +568,7 @@ Integrate `SfToast` for user notifications throughout the application. When a us ``` -The `OnActionBegin` event of the `SfSchedule` component can be bound to a method that will handle the toast notifications. +Bind the `OnActionBegin` event of the `SfSchedule` component to a method that handles toast notifications. ```csharp public async Task OnActionBegin(ActionEventArgs args) @@ -620,12 +621,12 @@ The `OnActionBegin` event of the `SfSchedule` component can be bound to a method ## GitHub and demo references -The complete code for this example is available in the [GitHub repository](https://github.com/syncfusion/blazor-showcase-stay-reservation). +The complete code for this example is available in the GitHub repository: https://github.com/syncfusion/blazor-showcase-stay-reservation -A demo of this example can be tried in [this link](https://blazor.syncfusion.com/showcase/stay-reservation). +Try the live demo: https://blazor.syncfusion.com/showcase/stay-reservation ## Summary -This guide has demonstrated how to build a functional and interactive stay reservation application. It has shown how to compose a complex UI by combining multiple Syncfusion® Blazor components like the **Scheduler**, **Sidebar**, **AppBar**, **Accordion**, **Inputs**, and **Dropdowns**. +This guide demonstrates how to build a functional and interactive stay reservation application. It shows how to compose a complex UI by combining Syncfusion® Blazor components such as **Scheduler**, **Sidebar**, **AppBar**, **Accordion**, **Inputs**, and **DropDowns**. -Most importantly, a clean state management pattern has been implemented using a singleton service, allowing the components to communicate and share data seamlessly. This architecture is scalable and makes the application easy to maintain and extend with new features. +A clean state management pattern is implemented using a singleton service, allowing the components to communicate and share data seamlessly. This architecture is scalable and makes the application easier to maintain and extend with new features. diff --git a/blazor/ui-kit/build-your-first-blazor-app-with-blocks.md b/blazor/ui-kit/build-your-first-blazor-app-with-blocks.md index c61700fc9f..9b4f11e247 100644 --- a/blazor/ui-kit/build-your-first-blazor-app-with-blocks.md +++ b/blazor/ui-kit/build-your-first-blazor-app-with-blocks.md @@ -1,30 +1,30 @@ --- layout: post -title: Build your first Blazor app with our blocks | Syncfusion -description: Learn all about building your first Blazor app using our blocks from the Essential Blazor UI Kit in Syncfusion Essential Studio and more. +title: Build your first Blazor app with UI Kit blocks | Syncfusion +description: Build a Blazor Web App using blocks from the Essential UI Kit. Configure Tailwind or Bootstrap themes and add a Sign in block. Explore to more details. platform: Blazor control: UI Kit documentation: ug --- -# Build your first Blazor App with our blocks +# Build your first Blazor App with UI Kit blocks -This tutorial guides you through building a Blazor Web App using Syncfusion's UI Kit blocks. It demonstrates how to set up a new Blazor Server project, choose between Tailwind CSS or Bootstrap 5.3 themes, and add a sign-in block in your application. The goal is to help developers quickly build responsive, modern web apps using a variety of prebuilt blocks with minimal effort. +This tutorial guides you through building a Blazor Web App using blocks from the Syncfusion Essential UI Kit for Blazor. It demonstrates how to create a new project, choose Tailwind CSS or Bootstrap 5.3 themes, and add a Sign in block. The goal is to help developers quickly build responsive, modern web apps using pre-built blocks with minimal effort. ## Create a new Blazor App -A Blazor Web App is used for this example. To create a new app, follow the official setup guide [here](https://learn.microsoft.com/en-us/training/modules/build-your-first-blazor-web-app/3-exercise-configure-environment?pivots=vscode). This tutorial then walks through the step-by-step process of adding a simple sign-in block to the newly created app, named **MyBlazorApp**. +A Blazor Web App is used for this example. To create a new app, follow the Microsoft setup guide [here](https://learn.microsoft.com/en-us/training/modules/build-your-first-blazor-web-app/3-exercise-configure-environment?pivots=vscode). This tutorial then walks through adding a simple Sign in block to the newly created app named **MyBlazorApp**. > This tutorial focuses on using Blazor Server rendering mode rather than Blazor WebAssembly. ![New Blazor App](images/new-blazor-app.png) -## Setting up Tailwind CSS or Bootstrap 5.3 theme in the app +## Set up Tailwind CSS or Bootstrap 5.3 theme After creating the new Blazor app named **MyBlazorApp**, open it in Visual Studio Code (which will be used throughout this walkthrough). The next step is to choose a theme, either Tailwind CSS or Bootstrap 5.3, in either light or dark mode, and configure the app accordingly. ### Tailwind CSS configuration -If you choose **Tailwind CSS** theme, follow these steps to configure it. +If the **Tailwind CSS** theme is selected, follow these steps to configure it. 1. In **Components -> App.razor** file, add the following code for light mode (`class="light"`) and dark mode (`class="dark"`) in the `` tag. @@ -40,7 +40,7 @@ If you choose **Tailwind CSS** theme, follow these steps to configure it. ``` -2. In **Components -> App.razor** file, add the following scripts in the `` tag. The main purpose of these scripts is to dynamically generate the appropriate Tailwind CSS classes at runtime based on the styles used in the application, and to replace the primary (highlight) color in the CSS with a custom indigo color palette. +2. In the **Components -> App.razor** file, add the following scripts in the `` tag. These scripts generate Tailwind CSS classes at runtime based on the styles used in the application and replace the primary color with a custom indigo palette. This CDN approach is suitable for demos; for production builds, integrate Tailwind via a build pipeline. ```html @@ -70,9 +70,9 @@ If you choose **Tailwind CSS** theme, follow these steps to configure it. } ``` - > The Syncfusion® Blazor components uses **Indigo** for light mode and **Cyan** for dark mode. To maintain a uniform appearance, change the primary color accordingly. + > Syncfusion® Blazor components use **Indigo** for light mode and **Cyan** for dark mode. To maintain a uniform appearance, adjust the primary color accordingly. -3. In **Components -> App.razor** file, add the style oriented CDN link for Syncfusion® Blazor components in the `` tag. +3. In the **Components -> App.razor** file, add the theme stylesheet CDN link for Syncfusion® Blazor components in the `` tag. - For **light mode**: @@ -86,7 +86,7 @@ If you choose **Tailwind CSS** theme, follow these steps to configure it. ``` -4. **OPTIONAL**: If you wish to use our font icons prepared for **Tailwind CSS**, you can include the following CDN link: +4. **Optional**: To use the font icons prepared for **Tailwind CSS**, include the following CDN link: ```html @@ -100,7 +100,7 @@ Now that the **Tailwind CSS** theme is configured for either light or dark mode ### Bootstrap 5.3 configuration -If you choose **Bootstrap 5.3** theme, follow these steps to configure it. +If the **Bootstrap 5.3** theme is selected, follow these steps to configure it. 1. In **Components -> App.razor** file, add the following code for light mode (`data-bs-theme="light"`) and dark mode (`data-bs-theme="dark"`) in the `` tag. @@ -116,13 +116,13 @@ If you choose **Bootstrap 5.3** theme, follow these steps to configure it. ``` -2. In **Components -> App.razor** file, add the style oriented CDN link for **Bootstrap 5.3** theme in the `` tag. +2. In the **Components -> App.razor** file, add the CDN link for the **Bootstrap 5.3** theme stylesheet in the `` tag. ```html ``` -3. In **Components -> App.razor** file, add the style oriented CDN link for Syncfusion® Blazor components in the `` tag. +3. In the **Components -> App.razor** file, add the theme stylesheet CDN link for Syncfusion® Blazor components in the `` tag. - For **light mode**: @@ -136,7 +136,7 @@ If you choose **Bootstrap 5.3** theme, follow these steps to configure it. ``` -4. **OPTIONAL**: If you wish to use our font icons prepared for **Bootstrap 5.3**, you can include the following CDN link: +4. **Optional**: To use the font icons prepared for **Bootstrap 5.3**, include the following CDN link: ```html @@ -154,26 +154,25 @@ Now that **MyBlazorApp** is set up with the desired theme configuration, the nex ### Steps to explore and copy block code snippets from the online demo -1. In the [online demo](https://blazor.syncfusion.com/essential-ui-kit), navigate to the **Authentication** category and select the **Sign In** block. This will direct you to the appropriate demo page. +1. In the [online demo](https://blazor.syncfusion.com/essential-ui-kit), navigate to the **Authentication** category and select the **Sign in** block. This opens the corresponding demo page. ![Navigate to the sign-in block demo](images/navigate-to-the-sign-in-block-demo.png) -2. On the demo page, go to the first demo, which showcases a simple sign-in block. Choose the desired theme, then switch from the **Preview** tab to the **Code** tab. +2. On the demo page, open the first demo, which showcases a simple Sign in block. Choose the desired theme, then switch from the **Preview** tab to the **Code** tab. ![Choose Tailwind CSS or Bootstrap theme](images/choose-tailwind-or-bootstrap-theme.png) -3. In the **Code** tab, copy the Razor (HTML) code using the **Copy to Clipboard** option and paste it into the **Components -> Pages -> Home.razor** file, replacing its content with the provided "Hello, world!" example. +3. In the **Code** tab, copy the Razor (HTML) code using the **Copy to Clipboard** option and paste it into the **Components -> Pages -> Home.razor** file, replacing the default "Hello, world!" content. ![Copy HTML code snippet to clipboard](images/copy-HTML-code-snippet-to-clipboard.png) > Ensure that you do not remove the `@page` directive and `` element while replacing the content. These are essential for routing and setting the page title. - -4. If CSS is provided, copy the CSS code, create a new file **Components -> Pages -> Home.razor.css**, and paste the code into it. Similarly, if a C# code is provided, create a new file **Components -> Pages -> Home.razor.cs** and paste the C# code into it. Otherwise, you can ignore this step. +4. If CSS is provided, copy the CSS code, create a new file **Components -> Pages -> Home.razor.css**, and paste the code into it. If C# code is provided, create a new file **Components -> Pages -> Home.razor.cs** and paste the code into it. Otherwise, ignore this step. ### Steps to explore and copy block code snippets from the GitHub source -1. On [downloading](https://github.com/syncfusion/essential-ui-kit-for-blazor) and opening the GitHub source in Visual Studio Code, navigate to the following folder: **Components -> Pages -> BlocksSection**. +1. After [downloading](https://github.com/syncfusion/essential-ui-kit-for-blazor) and opening the source in Visual Studio Code, navigate to **Components -> Pages -> BlocksSection**. ![Downloaded GitHub app in Visual Studio Code](images/downloaded-github-app-in-visual-studio-code.png) @@ -189,31 +188,31 @@ Now that **MyBlazorApp** is set up with the desired theme configuration, the nex ## Steps to install and configure Syncfusion® Blazor components -While copying and pasting the Razor (HTML) code, you'll notice that Syncfusion® Blazor components are used. To incorporate them into **MyBlazorApp**, install the necessary packages and import the corresponding namespaces to the **Components -> _Imports.razor** file for the app to run. +While copying and pasting the Razor code, note that Syncfusion® Blazor components are used. To incorporate them into **MyBlazorApp**, install the necessary packages and import the corresponding namespaces in **Components -> _Imports.razor** so the app can compile and run. In the simple sign-in block, components such as textbox, checkbox and button are used. After copying and pasting Razor (HTML) code into the Razor file, open the **MyBlazorApp.csproj** file and add the required nuget packages: `Syncfusion.Blazor.Buttons` and `Syncfusion.Blazor.Inputs`. For more details about other Syncfusion® Blazor component packages, refer to this [link](https://www.nuget.org/packages?q=Syncfusion.Blazor) ![Adding required packages for Syncfusion components](images/adding-required-packages-for-syncfusion-components.png) -Once the necessary packages are added, run the following command via the terminal to install those packages. +After the packages are added, run the following command in the terminal to install them. ```bash dotnet restore ``` -After restoring the packages, import the required namespaces `Syncfusion.Blazor.Buttons` and `Syncfusion.Blazor.Inputs` in the _Imports.razor file to enable Syncfusion® components in the application. +After restoring the packages, import the required namespaces `Syncfusion.Blazor.Buttons` and `Syncfusion.Blazor.Inputs` in **Components -> _Imports.razor** to enable Syncfusion® components in the application. ![Importing Syncfusion Namespaces](images/import-syncfusion-namespaces.png) -Finally, again check the [online demo](https://blazor.syncfusion.com/essential-ui-kit) or the [GitHub repository](https://github.com/syncfusion/essential-ui-kit-for-blazor) and copy the required Razor (HTML) code for the simple sign-in block into your app as outlined in the previous topic. +Finally, revisit the [online demo](https://blazor.syncfusion.com/essential-ui-kit) or the [GitHub repository](https://github.com/syncfusion/essential-ui-kit-for-blazor) and copy the required Razor (HTML) code for the simple Sign in block into your app as outlined above. ## Steps to download and add assets to the app -If you want to view and experience the images used in our design, you can download the **assets** folder from the following [GitHub repository](https://github.com/syncfusion/essential-ui-kit-for-blazor/tree/master/UI_Blocks/wwwroot/assets), place it inside the **wwwroot** folder of **MyBlazorApp**, and modify the image URLs in the Razor (HTML) if necessary. +To use the images from the design, download the **assets** folder from the [GitHub repository](https://github.com/syncfusion/essential-ui-kit-for-blazor/tree/master/UI_Blocks/wwwroot/assets), place it inside the **wwwroot** folder of **MyBlazorApp**, and update image URLs in the Razor (HTML) file if necessary. ## Steps to run the app -Now that everything is set up in **MyBlazorApp** — including the Razor (HTML), CSS (if applicable), C# (if applicable), and assets (optional) — you are ready to build and launch the app. Type the following command in the terminal, and you will see a localhost URL provided by the Blazor development server. +With **MyBlazorApp** set up—including Razor markup, CSS (if applicable), C# (if applicable), and and assets (optional) — you can build and run the app. Run the following command in the terminal; a localhost URL will be provided by the Blazor development server. ```bash dotnet run @@ -221,6 +220,6 @@ dotnet run ![Build and launch the app](images/build-and-launch-the-app.png) -To view the app in your browser, simply **Ctrl + Click** (or **Cmd + Click** on macOS) on the localhost URL displayed in the terminal. This will open the app in your default browser, allowing you to view and experience the simple sign-in block. +To view the app in a browser, **Ctrl+click** (or **Cmd+click** on macOS) the localhost URL displayed in the terminal. This opens the app in the default browser and displays the simple Sign in block. ![View the app in the browser using the localhost URL](images/view-the-app-in-the-browser-using-the-localhost-URL.png) diff --git a/blazor/ui-kit/getting-started.md b/blazor/ui-kit/getting-started.md index ed3329e1fa..6c3166ac2e 100644 --- a/blazor/ui-kit/getting-started.md +++ b/blazor/ui-kit/getting-started.md @@ -1,20 +1,20 @@ --- layout: post -title: Getting Started with Essential UI Kit for Blazor | Syncfusion -description: Checkout and learn about getting started with the Essential UI Kit for Blazor in Syncfusion Essential Studio, along with more details. +title: Get started with the Essential UI Kit for Blazor | Syncfusion +description: Learn here about how to set up the Essential UI Kit for Blazor from GitHub or try the online demo, including prerequisites and license key registration. platform: Blazor control: UI Kit documentation: ug --- -# Getting Started with Essential UI Kit for Blazor +# Getting started with the Essential UI Kit for Blazor -Follow the steps below to get started with Essential UI Kit for Blazor. You can begin in one of two ways: +Use either of the following options to explore the Essential UI Kit for Blazor: - **Download the App from GitHub**: Get the full free source code and run the app locally to explore the blocks. - **View the Online Demo**: Alternatively, you can try out the blocks directly through the online demo to see them in action without needing to download anything. -## Get Started by Downloading the App from GitHub +## Get started by downloading the app from GitHub ### Step 1: Download and Open the App in Visual Studio Code @@ -22,38 +22,39 @@ Download the app from the GitHub [link](https://github.com/syncfusion/essential- ![Launching the downloaded app](images/launching-the-downloaded-app.png) -### Step 2: Open a New Terminal +### Step 2: Open a new terminal In Visual Studio Code, go to the **Terminal** menu and select **New Terminal** to open the integrated terminal. -![Opening a new terminal](images/opening-a-new-terminal.png) +![Open a new terminal in Visual Studio Code](images/opening-a-new-terminal.png) ### Step 3: Install Dependencies and Run the App -Run the following commands one after the other in the terminal: -1. **Restore dependencies** - Run the command below to install all necessary packages related to the blocks, the Syncfusion® Blazor components, and the sample browser. +Run the following commands in the terminal (PowerShell on Windows): - ```bash - dotnet restore - ``` +1. Restore dependencies - This will download and install all the dependencies listed in the **.csproj** file. +```bash +dotnet restore +``` -2. **Serve the App Locally** - Once the dependencies are installed, you can run the app locally by starting the Blazor development server. To do so, run the following command. - - ```bash - dotnet run - ``` +Restores the packages referenced in the project file. Note: dotnet run also performs an implicit restore if needed. - This command will start the local development server, and you'll see an output in the terminal indicating the app is running. Typically, it will display a local host URL like this: +2. Serve the app locally - ![Local development server running](images/local-development-server-running.png) +Once the dependencies are installed, you can run the app locally by starting the Blazor development server. To do so, run the following command. - To view the app in your browser, simply **Ctrl + Click** (or **Cmd + Click** on macOS) on the local host URL displayed in the terminal. This will open the app in your default browser, allowing you to interact with the blocks. +```bash +dotnet run +``` -### Step 4: License Key Requirement +This command will start the local development server, and you'll see an output in the terminal indicating the app is running. Typically, it will display a local host URL like this: + +![Terminal output showing the local development server URL](images/local-development-server-running.png) + +To view the app in your browser, simply **Ctrl + Click** (or **Cmd + Click** on macOS) on the local host URL displayed in the terminal. This will open the app in your default browser, allowing you to interact with the blocks. + +### Step 4: License key requirement The blocks include several Syncfusion® Blazor components that require an active license key for proper display and usage. To activate the license, refer to the topics below: @@ -65,6 +66,6 @@ Once you have your license key, register it in the Blazor app through any one of By adding the license key, you ensure seamless browsing and usage of the blocks, making them fully functional and free from licensing issues. -## Get Started by Viewing the Online Demo +## Get started by viewing the online demo If you prefer a quick demo instead of downloading the app, you can explore the blocks directly through the online demo. Simply visit the official [Essential UI Kit for Blazor](https://blazor.syncfusion.com/essential-ui-kit) website to interact with the blocks. diff --git a/blazor/ui-kit/overview.md b/blazor/ui-kit/overview.md index 4e95bf17f8..03c04d2a70 100644 --- a/blazor/ui-kit/overview.md +++ b/blazor/ui-kit/overview.md @@ -1,16 +1,18 @@ --- layout: post -title: Overview of Essential UI Kit for Blazor | Syncfusion -description: Learn all about the overview of the Essential UI Kit for Blazor in Syncfusion Essential Studio and more here. +title: Essential UI Kit for Blazor overview | Syncfusion +description: Explore the Essential UI Kit for Blazor over 260 ready-to-use blocks built with Razor, CSS, C#, and Blazor components, with Tailwind and Bootstrap support. platform: Blazor -control: UI Kit +control: UI Kit documentation: ug --- -# Overview: Essential UI Kit for Blazor +# Essential UI Kit for Blazor overview The Essential UI Kit for Blazor comprises over 260 responsive, ready-to-use, easy-to-implement, and customizable blocks designed to help you quickly build web applications. These blocks are developed using HTML (Razor), CSS, C#, and Syncfusion® Blazor components, delivering robust functionality and ease of use. They are compatible with both Tailwind CSS and Bootstrap 5.3 CSS frameworks, supporting light and dark modes to offer flexibility and seamless integration across different user preferences. The UI kit includes blocks for the following categories: +The UI Kit includes blocks for the following categories: + @@ -110,19 +112,20 @@ The Essential UI Kit for Blazor comprises over 260 responsive, ready-to-use, eas > These provide pre-designed blocks for the quick implementation of web applications. However, customization and the integration of business logic must be handled on your end to meet your specific requirements. -## Supported Blazor Versions +## Supported Blazor versions + The blocks designed and showcased are built using .NET 8, but you can use other versions of Blazor as well, since they are primarily developed with HTML, CSS, and C# to facilitate building your web applications. Additionally, for using Syncfusion® Blazor components, the compatible Blazor and Syncfusion® versions are outlined in this [link](https://blazor.syncfusion.com/documentation/common/how-to/version-compatibility) for your reference. -## Supported Browsers +## Supported browsers - Google Chrome - Microsoft Edge - Safari - Mozilla Firefox -## Supported CSS Frameworks +## Supported CSS frameworks - Tailwind CSS - Bootstrap 5.3 -Both **Tailwind CSS** and **Bootstrap 5.3** support **Light** and **Dark** modes, allowing you to seamlessly adapt the blocks to your web applications based on user preferences or system settings. This flexibility ensures a consistent and optimal user experience across different environments and devices. +Both **Tailwind CSS** and **Bootstrap 5.3** support **Light** and **Dark** modes, allowing the blocks to adapt to user preferences or system settings for a consistent experience across devices. diff --git a/blazor/visual-studio-code-integration/code-snippet.md b/blazor/visual-studio-code-integration/code-snippet.md index 6f5d20a8bf..f3017f3246 100644 --- a/blazor/visual-studio-code-integration/code-snippet.md +++ b/blazor/visual-studio-code-integration/code-snippet.md @@ -1,47 +1,47 @@ --- layout: post -title: Code Snippets - Blazor Extension Visual Studio Code | Syncfusion -description: Learn here all about how to use code snippet utility of Syncfusion Blazor Extension for Visual Studio Code and much more. +title: Code snippets for the Syncfusion Blazor extension | Syncfusion +description: Learn here about that how to use the code snippet utilities in the Syncfusion Blazor extensions for the Visual Studio Code. Explore here to more details. platform: Blazor -component: Common +control: Common documentation: ug --- # Add Syncfusion® Blazor component in the Blazor application -The Syncfusion® Blazor code snippet utility for Visual Studio Code includes snippets for inserting a Syncfusion® Blazor component with various features into the Blazor Application's Razor code editor. +The Syncfusion® Blazor code snippet utility for Visual Studio Code provides snippets to insert Syncfusion® Blazor components with common features into a Blazor application's Razor code editor. - N> The Syncfusion® Blazor code snippet is available from Essential Studio® 2021 Volume 1 (`v19.1.0.54`). + N> The Syncfusion® Blazor code snippet feature is available from Essential Studio® 2021 Volume 1 (`v19.1.0.54`). ## Add a Syncfusion® Blazor component -The instructions below guide you the process of using the Syncfusion® Blazor code snippet in your Blazor application. +The following steps describe how to use the Syncfusion® Blazor code snippets in a Blazor application. -1. In Visual Studio Code, open an existing Blazor Application or create a new Blazor Application. +1. In Visual Studio Code, open an existing Blazor application or create a new one. -2. Open the razor file that you need and place the cursor in required place where you want to add Syncfusion® component. +2. Open the required Razor file and place the cursor where the Syncfusion® component should be inserted. -3. You can find the Syncfusion® Blazor component with the various features by typing the **sf** word in the format shown below. +3. Type the prefix **sf** and use the following format to discover component snippets and features. ``` sf- - For Example, sfgrid-grouping + For example, sfgrid-grouping ``` -4. Choose the Syncfusion® component and click the **Enter** or **Tab** key, the Syncfusion® Blazor component will be added in the razor file. +4. Select the desired Syncfusion component and press **Enter** or **Tab**. The corresponding component markup is inserted into the Razor file. - ![Code Snippet](images/codesnippet.gif) + ![Animated demo showing insertion of a Syncfusion Blazor code snippet](images/codesnippet.gif) -5. After adding the Syncfusion® Blazor component to the razor file, use the tab key to fill in the required values to render the component with data. You can find the comment section in the code snippet to see what values are required. +5. After inserting the Syncfusion® Blazor component, use the Tab key to navigate placeholders and provide the required values. Review the inline comments in the snippet to identify which values are required. - ![Comment](images/Comment.png) + ![Snippet comments highlighting required placeholders](images/Comment.png) -6. You can also find the Syncfusion® help link at the top of the added snippet to learn more about the new Syncfusion® Blazor component feature. +6. A Syncfusion® help link is included at the top of the snippet to learn more about the inserted component or feature. - ![Help](images/Help.png) + ![Help link shown at the top of the inserted snippet](images/Help.png) ## Configure Blazor application with Syncfusion -The Syncfusion® Blazor snippet simply inserts the code into the razor file. You must configure the Blazor application with Syncfusion® by installing the Syncfusion® Blazor NuGet package, namespace, themes, and registering the Syncfusion® Blazor Service. To configure, follow the steps below: +The Syncfusion® Blazor snippet only inserts code into the Razor file. Configure the Blazor application by adding the required NuGet packages, namespaces, themes, and registering the Syncfusion® Blazor service. Follow these steps: 1. Open the Blazor application file and manually add the required Syncfusion® Blazor individual NuGet package(s) for the Syncfusion® Blazor components as a package reference. Refer to [this section](https://blazor.syncfusion.com/documentation/nuget-packages#benefits-of-using-individual-nuget-packages) to learn about the advantages of the individual NuGet packages. This NuGet package will be automatically restored when building the application. @@ -49,18 +49,18 @@ The Syncfusion® Blazor snippet simply inserts the code into the razor file. You N> Starting with Volume 4, 2020 (v18.4.0.30) release, Syncfusion® provides [individual NuGet packages](https://blazor.syncfusion.com/documentation/nuget-packages) for our Syncfusion® Blazor components. We highly recommend this new standard for your Blazor production applications. -2. To render the Syncfusion® components in your application, open the **~/_Imports.razor** file and add the required Syncfusion® Blazor namespace entries. +2. To render Syncfusion® components, open **~/_Imports.razor** and add the required Syncfusion® Blazor namespace entries. ![Namespace](images/Namespace-Snippet.png) -3. Add the Syncfusion® Blazor [theme](https://blazor.syncfusion.com/documentation/appearance/themes) in the `` element of the **~/Components/App.razor** page for Web App and `` element of the **~/Pages/_Host.html** page for server application and **~/wwwroot/index.html** page for a client application. +3. Add a Syncfusion® Blazor [theme](https://blazor.syncfusion.com/documentation/appearance/themes) in the `` element of **~/Components/App.razor** for Blazor Web App, in **~/Pages/_Host.cshtml** for Blazor Server, and in **~/wwwroot/index.html** for a Blazor WebAssembly (client) application. ![Themes](images/Themes-Snippet.png) -4. Open the **~/Program.cs** file for Web App and server application and client application then register the Syncfusion® Blazor Service. +4. Open the relevant **~/Program.cs** file(s) for Web App and server application and client application and register the Syncfusion® Blazor service. -If you select an **Interactive render mode** as `WebAssembly` or `Auto`, you need to register the Syncfusion® Blazor service in both **~/Program.cs** files of your Blazor Web App. +If the Blazor Web App uses an interactive render mode of `WebAssembly` or `Auto`, register the Syncfusion® Blazor service in both **~/Program.cs** files of the Blazor Web App. - ![Syncfusion Configuration](images/Configuration-Snippet.png) +![Registration of the Syncfusion Blazor service](images/Configuration-Snippet.png) 5. If you installed the trial setup or NuGet packages from nuget.org you must register the Syncfusion® license key to your application since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/overview#how-to-generate-syncfusion-license-key) to generate and register the Syncfusion® license key to your application. Refer to this [UG](https://blazor.syncfusion.com/documentation/getting-started/license-key/overview) topic for understanding the licensing details in Essential Studio® for Blazor. \ No newline at end of file diff --git a/blazor/visual-studio-code-integration/convert-project.md b/blazor/visual-studio-code-integration/convert-project.md index 7f12a59ba0..9b7ea35d4e 100644 --- a/blazor/visual-studio-code-integration/convert-project.md +++ b/blazor/visual-studio-code-integration/convert-project.md @@ -1,41 +1,41 @@ --- layout: post -title: Convert Project - Blazor Extension for Visual Studio Code | Syncfusion -description: Learn here all about how to convert blazor application into syncfusion blazor application using Blazor Extension for Visual Studio Code. +title: Convert a project using the Blazor extension | Syncfusion +description: Learn here about how to convert an existing Blazor application into a Syncfusion Blazor application using the Blazor extension for Visual Studio Code. platform: Blazor -component: Common +control: Common documentation: ug --- # Converting Blazor Extension for Visual Studio Code -The Syncfusion® Blazor conversion is an add-in for Visual Studio Code that converts an existing Blazor application into a Syncfusion® Blazor Web Application by adding the required NuGet packages and themes. +The Syncfusion® Blazor conversion add-in for Visual Studio Code converts an existing Blazor application into a Syncfusion® Blazor web application by adding the required NuGet packages and themes. N> The Syncfusion® Blazor Web Application Project Conversion utility is available from `v17.4.0.39`. -The steps below assist you to using the Syncfusion® Project conversion in your existing Blazor Web Application: +Use the following steps to run the Syncfusion® project conversion in an existing Blazor Web application: -1. Open an existing Blazor Web Application or create a new Microsoft Blazor Web Application in Visual Studio Code. +1. In Visual Studio Code, open an existing Blazor Web application or create a new Blazor Web application. -2. Select **Convert to Syncfusion® Blazor Application...** from the context menu when you right-click on the **Project file** from Explorer (Workspace). Refer the screenshot below. +2. In Explorer (Workspace), right-click the project file and select **Convert to Syncfusion Blazor Application...** from the context menu. Refer the screenshot below. - ![Conversion Add-in](images/Conversion.PNG) + ![Context menu showing Convert to Syncfusion Blazor Application command](images/Conversion.PNG) -3. **Select Blazor Version** (which published in `nuget.org`) from the palette appears. +3. From the Command Palette, choose **Select Blazor Version** (version published on `nuget.org`). - ![Select Blazor Version](images/VersionSelection.PNG) + ![Palette showing selection of Blazor version](images/VersionSelection.PNG) -4. Choose the **Theme** from the palette appears. +4. From the palette, choose the desired Syncfusion theme. - ![Select Themes](images/ChooseThemes.PNG) + ![Palette showing selection of Syncfusion themes](images/ChooseThemes.PNG) -5. The application configured with Syncfusion® Blazor required NuGet packages and themes. +5. The application is configured with the required Syncfusion® Blazor NuGet packages and themes. 6. If you installed the trial setup or NuGet packages from nuget.org you must register the Syncfusion® license key to your application since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/overview#how-to-generate-syncfusion-license-key) to generate and register the Syncfusion® license key to your application. Refer to this [UG](https://blazor.syncfusion.com/documentation/getting-started/license-key/overview) topic for understanding the licensing details in Essential Studio® for Blazor. ## NuGet Packages -Based on the application type, the following NuGet packages are added as NuGet references. +Based on the application type, the following NuGet packages are added as dependencies. | Syncfusion® Blazor NuGet packages | Application type | |---|---| @@ -43,19 +43,19 @@ Based on the application type, the following NuGet packages are added as NuGet r | `Syncfusion.Blazor.PdfViewerServer.Windows` | Syncfusion® Blazor Server App | | `Syncfusion.Blazor.WordProcessor` | Syncfusion® Blazor Server App
Syncfusion® Blazor WebAssembly App
Syncfusion® Blazor WebAssembly App (ASPNET Core hosted)
Syncfusion® Blazor WebAssembly App (Progressive Web Application)| -The NuGet packages added to the application file as follows. +The packages are added to the application as shown below. -![NuGetPackage](images/NuGetPackage.png) +![Project file showing Syncfusion NuGet package references](images/NuGetPackage.png) ## Theme links -While converting the application, the selected Syncfusion® Blazor theme is added in the following location of a Blazor type application. +During conversion, the selected Syncfusion® Blazor theme is added in the following locations based on the application type. | Application type | File location | |---|---| | Syncfusion® Blazor Web App | ~/Components/App.razor | -| Syncfusion® Blazor Server App | {Project location}/Pages//_Host.cshtml | +| Syncfusion® Blazor Server App | {Project location}/Pages/_Host.cshtml | | Syncfusion® Blazor WebAssembly App (ASPNET Core hosted)
Syncfusion® Blazor WebAssembly App (Progressive Web Application)| {Client Project location}/wwwroot/index.html | | Syncfusion® Blazor WebAssembly App | {Project location}/wwwroot/index.html| -![CDNLink](images/CDNLink.png) \ No newline at end of file +![Example showing where the theme link is added in the project](images/CDNLink.png) diff --git a/blazor/visual-studio-code-integration/create-project.md b/blazor/visual-studio-code-integration/create-project.md index 8186468ae2..91a06d0173 100644 --- a/blazor/visual-studio-code-integration/create-project.md +++ b/blazor/visual-studio-code-integration/create-project.md @@ -1,38 +1,38 @@ --- layout: post -title: Create Projects using Project Templates via Extensions | Syncfusion -description: Learn here about how to create syncfusion blazor application using Syncfusion Blazor Extension for Visual Studio Code. +title: Create projects using project templates in VS Code | Syncfusion +description: Learn how to create a Syncfusion Blazor application using the Syncfusion Blazor extension for Visual Studio Code. platform: Blazor -component: Common +control: Common documentation: ug --- -# Creating a Syncfusion® Blazor application +# Create a Syncfusion® Blazor application -Syncfusion® provides the Blazor Template Studio in Visual Studio Code, which allows you to create a Syncfusion® Blazor application with Syncfusion® components. The Syncfusion® Blazor app is created with the required component Syncfusion® NuGet references, namespaces, styles, and component render code. The Template Studio provides an easy-to-use project wizard that walks you through the process of creating an application with Syncfusion® components. +Syncfusion® provides the Blazor Template Studio for Visual Studio Code, which scaffolds a Syncfusion® Blazor application preconfigured with Syncfusion® NuGet packages, namespaces, themes, and component render code. The Template Studio offers a guided wizard to create an application with Syncfusion® components. -N> Blazor project templates from `v17.4.0.39` are supported by the Syncfusion® Visual Studio Code project template. +N> Blazor project templates from version `v17.4.0.39` and later are supported by the Syncfusion Visual Studio Code project template. -The instructions below assist you in creating **Syncfusion® Blazor Applications** using **Visual Studio Code**: +Use the following steps to create Syncfusion® Blazor applications in Visual Studio Code: -1. To create a Syncfusion® Blazor application in Visual Studio Code, open the command palette by pressing **Ctrl+Shift+P**. Search for the word **Syncfusion®** in the Visual Studio Code palette to get the templates provided by Syncfusion®. +1. To create a Syncfusion® Blazor application in Visual Studio Code, open the Command Palette with **Ctrl+Shift+P**. Search for the word **Syncfusion®** in the Visual Studio Code palette to get the templates provided by Syncfusion®. - ![CreateProjectPalette](images/CreateBlazorProjectPalette.png) + ![Command Palette showing Syncfusion commands](images/CreateBlazorProjectPalette.png) -2. Select **Syncfusion® Blazor Template Studio: Launch**, then press **Enter** key. The Template Studio wizard for configuring the Syncfusion® Blazor app will be launched. Provide the Project name and Project path. +2. Select **Syncfusion Blazor Template Studio: Launch**, and press **Enter**. The Template Studio wizard opens to configure the Syncfusion® Blazor app. Enter the project name and project path. - ![TemplateStudioWizard](images/ProjectLocationName1.png) + ![Template Studio wizard with Project name and Project path fields](images/ProjectLocationName1.png) - N> Refer to the .NET SDK support for Syncfusion® Blazor Components [here](https://blazor.syncfusion.com/documentation/system-requirements#net-sdk). + N> For supported .NET SDK versions, see the .NET SDK support for Syncfusion Blazor components in the system requirements [documentation](https://blazor.syncfusion.com/documentation/system-requirements#net-sdk). -3. Select either **Next** or the **Project type** tab. Syncfusion® Blazor project types will be displayed. Choose one of the following Syncfusion® Blazor project types based on the version of the .NET SDK you are using. +3. Select **Next** or the **Project type** tab. The available Syncfusion® Blazor project types are displayed. Choose one based on the .NET SDK version in use. | .NET SDK version | Supported Syncfusion® Blazor Application Type | | ---------------- | -------------------------------------------- | | [.NET 9.0](https://dotnet.microsoft.com/en-us/download/dotnet/9.0), [.NET 8.0](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) | Syncfusion® Blazor Web App | | [.NET 9.0](https://dotnet.microsoft.com/en-us/download/dotnet/9.0), [.NET 8.0](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) | Syncfusion® Blazor WebAssembly App | - In the **Syncfusion® Blazor Web App** application type, you can configure the following options: + In the **Syncfusion® Blazor Web App** application type, the following options are available:
Category
@@ -55,98 +55,98 @@ The instructions below assist you in creating **Syncfusion® Blazor WebAssembly App** application type, you can choose Progressive Web Application. + In the **Syncfusion Blazor WebAssembly App** project type, choose Progressive Web Application (PWA). - ![ProjectType](images/ProjectTypeDetails1.png) + ![Project type selection showing Blazor WebAssembly and PWA option](images/ProjectTypeDetails1.png) -4. Click either **Next** or the **Controls** tab and select the Syncfusion Blazor components you want to add to your application. +4. Select **Next** or the **Controls** tab, and then choose the Syncfusion® Blazor components to include in the application. - ![Controls Section](images/ControlsSection.png) + ![Controls tab listing Syncfusion Blazor components](images/ControlsSection.png) - Choose the required control(s) by clicking the corresponding control box. + Choose the required control(s) by selecting the corresponding control tiles. - To unselect the added control(s), use either one of the following options: + To unselect added control(s), use one of the following options: **Option 1:** Click the corresponding selected control box. - **Option 2:** Click ‘x’ button for corresponding control in the control list from **Project Details**. + **Option 2:** In **Project Details**, click the ‘x’ next to the corresponding control in the selected controls list. - N> **Note:** Choose at least one control to enable the Features and Configuration tab. + N> Choose at least one control to enable the Features and Configuration tabs. -5. Click either **Next** or the **Features** tab, and you will see the features listed for the selected controls. You can choose the required features. +5. Select **Next** or the **Features** tab to view the available features for the selected controls, and choose the required options. ![FeaturesSection](images/FeaturesSection.png) -6. Click **Next** or the **Configuration** tab to load the Configuration section. You can choose the required (.NET 9.0 and .NET 8.0), themes, https configuration, localization option, authentication type, Blazor Web App, and Blazor Web Assembly application types. +6. Select **Next** or the **Configuration** tab to open the Configuration section. Configure the target .NET version (.NET 9.0 or .NET 8.0), theme, HTTPS configuration, localization, authentication type, and options specific to Blazor Web App or Blazor WebAssembly App types. - Depending on your Syncfusion® Blazor Application Type, refer to the table below for supported authentication types. + Depending on the selected Syncfusion® Blazor application type, the following authentication options are supported: | Syncfusion® Blazor Application Type | Supported Authentication Types | | ------------- | ------------- | - | Syncfusion® Blazor Web App | None and Individual Accounts | - | Syncfusion® Blazor WebAssembly App | None, Individual Accounts and Microsoft Identity Platform | + | Syncfusion® Blazor Web App | None, Individual Accounts | + | Syncfusion® Blazor WebAssembly App | None, Individual Accounts, Microsoft Identity Platform | - If you choose the **Blazor Web App** application type, you can customize the Interactivity type and Interactivity location options. + For the **Blazor Web App** application type, Interactivity type and Interactivity location can be customized. - ![WebAppConfiguration](images/WebApp.png) + ![Configuration panel showing interactivity options for Blazor Web App](images/WebApp.png) - If you choose the **Blazor Web Assembly App** application type, you can customize the Progressive Web Application option. + For the **Blazor WebAssembly App** application type, the Progressive Web Application option can be enabled or disabled. - ![WASMConfiguration](images/WebAssembly.png) + ![Configuration panel showing PWA option for Blazor WebAssembly](images/WebAssembly.png) **Project details section** - You can change the configuration details below in the Project Details section to change the application type, remove control(s) from the selected controls, or change the configurations. + Use the Project Details section to change the application type, remove selected control(s), or update configuration options. - ![ProjectDetails](images/ProjectDetailsRightSide.png) + ![Project Details panel showing selected controls and configuration summary](images/ProjectDetailsRightSide.png) -7. Click **Create** button. The Syncfusion® Blazor application has been created. The created Syncfusion® Blazor app has the Syncfusion® NuGet packages, styles, and the render code for the selected Syncfusion® component. +7. Click **Create**. The Syncfusion® Blazor application is created with the required Syncfusion® NuGet packages, styles, and the render code for the selected Syncfusion® components. -8. You can run the application to see the Syncfusion® components. Click **F5** or go to **Run>Start Debugging**. +8. Run the application to view the Syncfusion® components. Press **F5** or select **Run > Start Debugging**. - ![Readme](images/RunProject.png) + ![Running the generated Syncfusion Blazor project in Visual Studio Code](images/RunProject.png) 9. The Syncfusion® Blazor application configures with most recent Syncfusion® Blazor NuGet packages version, selected style, namespaces, selected authentication, and component render code for Syncfusion® components. 10. If you installed the trial setup or NuGet packages from nuget.org you must register the Syncfusion® license key to your application since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/license-key#how-to-generate-syncfusion-license-key) to generate and register the Syncfusion® license key to your application. Refer to this [UG](https://blazor.syncfusion.com/documentation/getting-started/license-key/overview) topic for understanding the licensing details in Essential Studio® for Blazor. -## Syncfusion® integration +## Syncfusion® integration The Syncfusion® Blazor application configures with latest Syncfusion® Blazor NuGet packages, styles, namespaces, and component render code for Syncfusion® components are added in the created application. -### NuGet Packages +### NuGet packages -The `Syncfusion.Blazor` NuGet package will be added as NuGet references for all application types. +The `Syncfusion.Blazor` package is added as a dependency for all project types. ![NuGetPackage](images/NuGetPackage.png) ### Style -The selected theme is added from Syncfusion® NuGet and its reference at these applications locations in Blazor. +The selected theme is added from the Syncfusion® NuGet package and referenced at the following locations. | Application type | File location | |---|---| | Syncfusion® Blazor Web App | ~/Components/App.razor | -| Syncfusion® Blazor WebAssembly App (ASPNET Core hosted)
Syncfusion® Blazor WebAssembly App (Progressive Web Application) | {Client Project location}/wwwroot/index.html | +| Syncfusion® Blazor WebAssembly App (ASP.NET Core hosted)
Syncfusion® Blazor WebAssembly App (Progressive Web Application) | {Client Project location}/wwwroot/index.html | | Syncfusion® Blazor WebAssembly App | {Project location}/wwwroot/index.html| -![CDNLink](images/CDNLink.png) +![Theme reference location examples](images/CDNLink.png) ### Namespaces -The Syncfusion® Blazor namespaces are added in the **`_imports.razor`** file. +The Syncfusion® Blazor namespaces are added in the **`_imports.razor`** file. -![NameSpace](images/NameSpace.png) +![Imports file showing Syncfusion namespaces](images/NameSpace.png) ### Component render code -The Syncfusion® Blazor Calendar, Button, and DataGrid component render code is in the Razor files in the pages folder. The render code is updated in these Razor files. +The Syncfusion Blazor Calendar, Button, and DataGrid component render code is added to the Razor files in the Pages folder. | File name | Code snippet added | |---|---| -| `~/Pages/Home.razor or Index.razor` | ![IndexFileChange](images/IndexFileChange.png) | -| `~/Pages/Counter.razor` | ![CounterPageChange](images/CounterPageChange.png) | -| `~/Pages/FetchData.razor` | ![FetchDataPageChange](images/FetchDataPageChange.png) | \ No newline at end of file +| `~/Pages/Home.razor or Index.razor` | ![Index page updated with Syncfusion components](images/IndexFileChange.png) | +| `~/Pages/Counter.razor` | ![Counter page updated with Syncfusion components](images/CounterPageChange.png) | +| `~/Pages/FetchData.razor` | ![FetchData page updated with Syncfusion DataGrid](images/FetchDataPageChange.png) | diff --git a/blazor/visual-studio-code-integration/download-and-installation.md b/blazor/visual-studio-code-integration/download-and-installation.md index b1d5e7afb6..14f1be6e17 100644 --- a/blazor/visual-studio-code-integration/download-and-installation.md +++ b/blazor/visual-studio-code-integration/download-and-installation.md @@ -1,79 +1,72 @@ --- layout: post -title: Download and Installation in Blazor Extension | Syncfusion -description: Learn here more about how to download and install in the Syncfusion Blazor Extension for Visual Studio Code and much more. +title: Download and installation for Blazor VS Code extension | Syncfusion +description: Learn here about how to download and install the Syncfusion Blazor extension for Visual Studio Code to scaffold and manage Syncfusion Blazor applications. platform: Blazor -component: Common +control: Common documentation: ug --- -# Download and Installation +# Download and Installation in VS Code Extension -Syncfusion® publishes the Visual Studio Code extension in the [Visual Studio Code marketplace](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Blazor-VSCode-Extensions). You can either install it directly from Visual Studio Code or download and install it from the Visual Studio Code marketplace. +Syncfusion® publishes the Visual Studio Code extension in the [Visual Studio Code Marketplace](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Blazor-VSCode-Extensions). Install it directly from Visual Studio Code or download it from the Marketplace and install locally. ## Prerequisites -The following software prerequisites must be installed to install the Syncfusion® Blazor extension, as well as to creating, adding component code, converting, and upgrading Syncfusion® Blazor applications. +Install the following prerequisites to install the Syncfusion® Blazor extension and to create, convert, and upgrade Syncfusion® Blazor applications. -* [Visual Studio Code 1.29.0 or later](https://code.visualstudio.com/download) - -* [Visual Studio 2022 ](https://visualstudio.microsoft.com/vs/) or later - -* [C# Extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) +- [Visual Studio Code 1.29.0 or later](https://code.visualstudio.com/download) +- [Visual Studio 2022 ](https://visualstudio.microsoft.com/vs/) or later +- [.NET SDK 8.0 or 9.0](https://dotnet.microsoft.com/en-us/download) +- [C# extension]((https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp)). ## Install through the Visual Studio Code Extensions -The instructions below describe the process of installing the Syncfusion® Blazor extensions from Visual Studio Code Extensions. +The steps below describe how to install the Syncfusion® Blazor extension from the Extensions view in Visual Studio Code. 1. Open Visual Studio Code. - 2. Navigate to **View > Extensions**, and the Manage Extensions option will appear on the left side of the window. +3. In the search box, enter Syncfusion Blazor to find the Syncfusion Blazor extension in the Marketplace. -3. By entering the keyword **"Syncfusion® Blazor"** in the search box, you can find the Syncfusion® Blazor Visual Studio Code extension in the Visual Studio Code Marketplace. - - ![Extension](images/Extension.png) + ![Extensions view showing Syncfusion Blazor extension search results](images/Extension.png) -4. Install the **"Blazor VSCode Extensions - Syncfusion"** extension by clicking the **Install** button. +4. Select **Blazor VSCode Extensions - Syncfusion**, and click **Install**. +5. Reload Visual Studio Code after installation by using the **Reload Window** command from the Command Palette. Open the Command Palette with **Ctrl+Shift+P**, then run Reload Window. -5. Reload Visual Studio Code after installation by using the **Reload Window** command in the Visual Studio Code palette. You can open the command palette by pressing **Ctrl+Shift+P** and find the Reload Window from Visual Studio Code commands. - - ![Reload-Window](images/Reload-Window.png) + ![Command Palette highlighting the Reload Window command](images/Reload-Window.png) 6. Now, you can create a new Syncfusion® Blazor application by using the Syncfusion® Blazor extensions from the Visual Studio Code Palette Find the **Syncfusion® Blazor Template Studio: Launch** from Visual Studio Code commands to open the Syncfusion® Blazor Template Studio wizard. - ![CreateProjectPalette](images/CreateProjectPalette.png) + ![Command Palette showing Syncfusion Blazor Template Studio](images/CreateProjectPalette.png) ## Install from the Visual Studio Code Marketplace -The instructions below describe the process of downloading and installing Syncfusion® Blazor applications from the Visual Studio Code Marketplace. - -1. Open [Syncfusion® Blazor Code Extensions](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Blazor-VSCode-Extensions) in Visual Studio Code Marketplace. +The steps below describe how to download and install the extension from the Visual Studio Code Marketplace website. +1. Open the [Syncfusion® Blazor VS Code Extensions](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Blazor-VSCode-Extensions) page in the Marketplace. 2. Click Install from Visual Studio Code Marketplace. The browser displays a popup window with information such as **"Open Visual Studio Code"**. When you click Open Visual Studio Code, the [Syncfusion® Blazor Extension](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Blazor-VSCode-Extensions) will launch in Visual Studio Code. +3. In Visual Studio Code, click **Install** on the **Blazor VSCode Extensions - Syncfusion** page. +4. Reload Visual Studio Code after installation by using the **Reload Window** command from the Command Palette. Open the Command Palette with **Ctrl+Shift+P**, then run Reload Window. -3. Install the **"Blazor VSCode Extensions - Syncfusion"** extension by clicking the **Install** button. - -4. Reload Visual Studio Code after installation by using the **Reload Window** command in the Visual Studio Code palette. You can open the command palette by pressing **Ctrl+Shift+P** and find the Reload Window from Visual Studio Code commands. - - ![Reload-Window](images/Reload-Window.png) + ![Command Palette highlighting the Reload Window command](images/Reload-Window.png) 5. Now, you can create a new Syncfusion® Blazor application by using the Syncfusion® Blazor extensions from the Visual Studio Code Palette Find the **Syncfusion® Blazor Template Studio: Launch** from Visual Studio Code commands to open the Syncfusion® Blazor Template Studio wizard. - ![CreateProjectPalette](images/CreateProjectPalette.png) + ![Command Palette showing Syncfusion Blazor Template Studio](images/CreateProjectPalette.png) ## Manually Installing an Extension in Visual Studio Code -The instructions below describe the process of installing the Syncfusion® Blazor extensions manually in visual studio code. -1. Install the extension by downloading it from the Visual Studio Marketplace and then installing it from a local file within VS Code. To do this: Download the **"SyncfusionInc.Blazor-VSCode-Extensions.vsix"** file from the [Visual Studio Code Marketplace](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Blazor-VSCode-Extensions). +The steps below describe how to install the Syncfusion Blazor extension manually in Visual Studio Code. -2. In VS Code, go to the Extensions view by clicking on the Extensions icon in the Activity Bar. +1. Download the SyncfusionInc.Blazor-VSCode-Extensions.vsix file from the [Visual Studio Code Marketplace](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Blazor-VSCode-Extensions). +2. In Visual Studio Code, open the Extensions view by clicking the Extensions icon in the Activity Bar. - ![ExtensionIcon](images/ExtensionIcon.png) + ![Extensions icon highlighted in the Activity Bar](images/ExtensionIcon.png) -3. Click on the three dots (ellipsis) in the top-right corner and select "Install from VSIX." +3. Click the More Actions (ellipsis) button in the top-right of the Extensions view, and select Install from VSIX. - ![InstallVsix](images/InstallVsix.png) + ![Extensions view More Actions menu with Install from VSIX option](images/InstallVsix.png) -4. Browse to the downloaded SyncfusionInc.Blazor-VSCode-Extensions.vsix file and install it. +4. Browse to the downloaded SyncfusionInc.Blazor-VSCode-Extensions.vsix file and complete the installation. - ![DownloadVsix](images/DownloadVsix.png) + ![File selection dialog for SyncfusionInc.Blazor-VSCode-Extensions.vsix](images/DownloadVsix.png) \ No newline at end of file diff --git a/blazor/visual-studio-code-integration/overview.md b/blazor/visual-studio-code-integration/overview.md index 7564e99ee4..d1e4898248 100644 --- a/blazor/visual-studio-code-integration/overview.md +++ b/blazor/visual-studio-code-integration/overview.md @@ -1,22 +1,19 @@ --- layout: post -title: Syncfusion Blazor Extension for Visual Studio Code | Syncfusion -description: Learn here all about introduction on Syncfusion Blazor extension for Visual Studio Code which made integration made ease. +title: Blazor extension for Visual Studio Code | Syncfusion +description: Overview of Blazor extension for Visual Studio Code that simplifies project setup, code snippets, project conversion, and upgrades for Syncfusion Blazor apps. platform: Blazor -component: Common +control: Common documentation: ug --- # Overview of Blazor Extension for Visual Studio Code -The [Syncfusion® Blazor Extension for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Blazor-VSCode-Extensions) simplifies the use of the Syncfusion® Blazor components by configuring the Syncfusion® Blazor NuGet packages and themes. +The [Syncfusion® Blazor extension for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Blazor-VSCode-Extensions) streamlines the use of Syncfusion® Blazor components by configuring the required NuGet packages and themes. -The Syncfusion® Blazor Extension provides the following support in Visual Studio Code: +The extension provides the following capabilities in Visual Studio Code: -[Project-Template](create-project): Creates Syncfusion® Blazor applications with required configuration for development with Syncfusion® Blazor component. - -[Code Snippet](code-snippet): Adds a Syncfusion® Blazor component with various features to the Blazor Application's Razor code editor. - -[Convert project](convert-project): Converts an existing Blazor Web Application to a Syncfusion® Blazor Web Application by importing the necessary Syncfusion® NuGet packages. - -[Upgrade project](upgrade-project): Upgrades the existing Syncfusion® Blazor Web Application from one Essential Studio® version to another version. \ No newline at end of file +- [Create project template](create-project): Creates a Syncfusion® Blazor application with the required configuration and dependencies for development. +- [Code snippets](code-snippet): Inserts Syncfusion® Blazor component snippets and common scenarios into the Razor editor. +- [Convert project](convert-project): Converts an existing Blazor application to use Syncfusion Blazor by adding the necessary NuGet packages and resources. +- [Upgrade project](upgrade-project): Upgrades an existing Syncfusion® Blazor application from one Essential Studio® version to another. diff --git a/blazor/visual-studio-code-integration/upgrade-project.md b/blazor/visual-studio-code-integration/upgrade-project.md index 3a0cb7df65..14dc7c649e 100644 --- a/blazor/visual-studio-code-integration/upgrade-project.md +++ b/blazor/visual-studio-code-integration/upgrade-project.md @@ -1,36 +1,36 @@ --- layout: post -title: Upgrade Project to Latest Version in Blazor | Syncfusion -description: Learn here all about upgrading project to use latest version using Syncfusion Blazor Extension for Visual Studio Code. +title: Upgrade a project to the latest version | Syncfusion +description: Learn here about how to upgrade a project to the latest version using the Syncfusion Blazor extension for Visual Studio Code. Explore to more details. platform: Blazor -component: Common +control: Common documentation: ug --- -# Upgrading Syncfusion® Blazor application to latest version +# Upgrading Syncfusion® Blazor application -The Syncfusion® Blazor Migration is an add-in for Visual Studio Code allows you to migrate an existing Syncfusion® Blazor Web Application from one Essential Studio® version to another. +The Syncfusion® Blazor migration add-in for Visual Studio Code enables upgrading an existing Syncfusion® Blazor web application from one Essential Studio® version to another. - N> The Syncfusion® Blazor Web Application Project Migration utility is available from `v17.4.0.39`. +N> The Syncfusion Blazor Web Application project migration utility is available from version `v17.4.0.39`. -The steps below assist you to migrating existing Syncfusion® Blazor Web Application. +Use the following steps to migrate an existing Syncfusion® Blazor Web Application. -1. Open an existing Syncfusion® Blazor Web Application or create a new Syncfusion® Blazor Web Application in Visual Studio Code. +1. In Visual Studio Code, open an existing Syncfusion® Blazor Web Application or create a new one. -2. Select **Migrate Syncfusion® Blazor Application to another version...** from the context menu when you right-click on the **Project file** from Explorer (Workspace). Refer to the screenshot below. +2. In Explorer (Workspace), right-click the project file and select **Migrate Syncfusion® Blazor Application to another version...** from the context menu. Refer to the screenshot below. - ![Migration add-in](images/Migration.PNG) + ![Context menu showing Migrate Syncfusion Blazor Application command](images/Migration.PNG) - N> If you have a Syncfusion® Blazor reference in your application, the Migration option will be enabled. + N> The Migration option is available only when the application already references Syncfusion® Blazor packages. -3. **Select Blazor Version** (which published in `nuget.org`) from the palette appears. +3. From the Command Palette, choose **Select Blazor Version** and pick the required Syncfusion® Blazor package version published on `nuget.org`. - ![Select Blazor Version](images/VersionSelection.PNG) + ![Palette showing selection of Syncfusion Blazor version](images/VersionSelection.PNG) -4. The Syncfusion® NuGet packages references and themes are updated to the selected version in the application. +4. The Syncfusion® Blazor NuGet package references and theme links are updated to the selected version in the application. - ![NuGetPackage](images/NuGetPackage.png) + ![Project file updated with new Syncfusion NuGet package versions](images/NuGetPackage.png) - ![CDNLink](images/CDNLink.png) + ![Theme link updated to the selected version](images/CDNLink.png) 5. If you installed the trial setup or NuGet packages from nuget.org you must register the Syncfusion® license key to your application since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/overview#how-to-generate-syncfusion-license-key) to generate and register the Syncfusion® license key to your application. Refer to this [UG](https://blazor.syncfusion.com/documentation/getting-started/license-key/overview) topic for understanding the licensing details in Essential Studio® for Blazor. \ No newline at end of file From 37c197508ef09ff733f43299b2a26c9e7f387dfd Mon Sep 17 00:00:00 2001 From: Backiaraj Date: Thu, 30 Oct 2025 13:19:13 +0530 Subject: [PATCH 2/2] Updated the Blazor common UG documentation --- .../code-generator.md | 30 +++--- .../download-and-installation.md | 52 +++++----- .../images/controlssection1.png | Bin 132089 -> 55093 bytes blazor/visual-studio-integration/overview.md | 24 ++--- .../visual-studio-integration/scaffolding.md | 90 +++++++++--------- .../template-studio.md | 38 ++++---- 6 files changed, 117 insertions(+), 117 deletions(-) diff --git a/blazor/visual-studio-integration/code-generator.md b/blazor/visual-studio-integration/code-generator.md index 799d930208..c7c4b2935c 100644 --- a/blazor/visual-studio-integration/code-generator.md +++ b/blazor/visual-studio-integration/code-generator.md @@ -1,51 +1,51 @@ --- layout: post -title: Code Generator in Blazor | Syncfusion -description: Learn here about adding the Blazor Component using Code Generator of Syncfusion Blazor Extension for Visual Studio. +title: Code generator for the Blazor extension | Syncfusion +description: Learn how to add Syncfusion Blazor component markup using the Code Generator in the Syncfusion Blazor extension for Visual Studio. Explore to more details. platform: Blazor -component: Common +control: Common documentation: ug --- # Add Syncfusion® Blazor component code -Syncfusion® provides a Code Generator component for the Blazor platform, allowing you to quickly insert component code into the desired location within a Razor file. The Syncfusion® extension automatically adds the necessary Syncfusion® components along with the required namespaces, styles, and NuGet references. The Code Generator is a simple wizard that interacts with data models and integrates Syncfusion® components with the required features into your application. +Syncfusion® provides a Code Generator component for the Blazor platform, allowing you to quickly insert component code into the desired location within a Razor file. The Syncfusion® extension automatically adds the necessary Syncfusion® components along with the required namespaces, styles, and NuGet references. The Code Generator is a simple wizard that interacts with data models and integrates Syncfusion® components with the required features into your application. -The steps below will assist you to add the Syncfusion® components code in your Blazor application through **Visual Studio 2022**: +Use the following steps to add Syncfusion® components to a Blazor application in **Visual Studio 2022**: -N> Before using the Syncfusion® Blazor Code Generator, check whether the Syncfusion® Blazor Extension is installed or not in Visual Studio Extension Manager by clicking on the Extensions -> Manage Extensions -> Installed. If this extension not installed, install the extension by follow the steps from the [download and installation](download-and-installation) help topic. +N> Before using the Syncfusion® Blazor Code Generator, verify that the Syncfusion® Blazor extension is installed in Visual Studio (Extensions -> Manage Extensions -> Installed). If it is not installed, follow the steps in the [download and installation](download-and-installation) topic. -1. Open your existing Blazor application or create a new Blazor application in the Visual Studio 2022 or Visual Studio 2022. +1. Open an existing Blazor application or create a new one in Visual Studio 2022. -2. To open the Syncfusion® Blazor Code Generator Wizard, select one of the options below in the Razor file, and then add Syncfusion® components: +2. To open the Syncfusion® Blazor Code Generator wizard from a Razor file, use one of the following options: **Option 1:** - To generate a specific component code, right-click on the editor of the Razor file at the required line and Select the **Syncfusion® Blazor Code Generator...** + To generate a specific component code, right-click in the Razor editor at the desired line and select **Syncfusion® Blazor Code Generator...** ![CodeGeneratorCommand](images/Code-Generator-Command.PNG) **Option 2:** - Open the .razor file and place the cursor at the required line then choose **Extension -> Syncfusion® -> Essential Studio® for Blazor -> Syncfusion® Blazor Code Generator…** from the Visual Studio menu. + Place the cursor at the required line in the .razor file, then choose **Extensions -> Syncfusion -> Essential Studio for Blazor -> Syncfusion Blazor Code Generator…** from the Visual Studio menu. ![CodeGeneratorMenu](images/Code-Generator-Menu.PNG) -3. The wizard for the Syncfusion® Blazor Code Generator will appear. Choose a required control. +3. The Syncfusion® Blazor Code Generator wizard opens. Choose the required component. ![CodeGeneratorWizard](images/Code-Generator-MainWizard.png) **Data Binding:** Data operation fields will be visible if the selected component has data. The data will be listed from your application. It interacts with data models and reduces the amount of time spent developing your application. You can choose the required Data Model Class, Data Source, Id, and more from your application. - **Feature:** Selected component features are listed. You can select the required features. + **Features:** Lists available features for the selected component. Choose the required options. - **Control requirements:** Contains the required user input fields for the selected component. You can provide the required value for those fields to add the component code. + **Component requirements:** Contains the required inputs for the selected component. Provide values to complete the generated markup. You can provide the required value for those fields to add the component code. - Click **Insert**. It generates the selected component render code and inserts it wherever the cursor is positioned. + Click **Insert** to generate the selected component render mode and insert it at the cursor location. ![ComponentRenderCode](images/Code-Generator-ComponentRenderCode.PNG) -4. In the Output window, select the **Syncfusion® Blazor Code Generator** from the **“Show output from”** drop-down to see the changes made to your application. +4. In the Output window, select **Syncfusion Blazor Code Generator** from the **Show output from** list to review the changes applied to the application. ![OutputWindow](images/Code-Generator-OutputWindow.PNG) diff --git a/blazor/visual-studio-integration/download-and-installation.md b/blazor/visual-studio-integration/download-and-installation.md index c892322f01..7a93d30099 100644 --- a/blazor/visual-studio-integration/download-and-installation.md +++ b/blazor/visual-studio-integration/download-and-installation.md @@ -1,71 +1,71 @@ --- layout: post -title: Download and Installation of Blazor Extension | Syncfusion -description: Check out the documentation for download and installation of Syncfusion Blazor Extension for Visual Studio. +title: Download and installation of the Blazor extension | Syncfusion +description: Learn here about how to download and install the Syncfusion Blazor extension for Visual Studio and manage the Blazor applications. Explore to more details. platform: Blazor -component: Common +control: Common documentation: ug --- -# Download and Installation +# Download and installation -Syncfusion® publishes the Visual Studio extension in the below Visual Studio marketplace link. You can either install it directly from Visual Studio or download and install it from the Visual Studio marketplace. +Syncfusion® publishes the Visual Studio extension in the Visual Studio Marketplace. Install it directly from Visual Studio or download and install it from the Visual Studio Marketplace. -[Visual Studio 2022](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.BlazorVSExtension) +[Download the Visual Studio 2022 extension](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.BlazorVSExtension) ## Prerequisites -The following software prerequisites must be installed to install the Syncfusion® Blazor extension, as well as to creating, adding snippet, converting, and upgrading Syncfusion® Blazor applications. +The following software is required to install the Syncfusion® Blazor extension and to create projects, add snippets, convert, and upgrade Syncfusion® Blazor applications. * [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/). -* [.NET 9.0](https://dotnet.microsoft.com/en-us/download/dotnet). +* [.NET 9.0 SDK](https://dotnet.microsoft.com/en-us/download/dotnet). -* [.NET 8.0](https://dotnet.microsoft.com/en-us/download/dotnet). +* [.NET 8.0 SDK](https://dotnet.microsoft.com/en-us/download/dotnet). -## Install through the Visual Studio Manage Extensions +## Install through Visual Studio Manage Extensions -The steps below assist you to how to install the Syncfusion® Blazor extensions from **Visual Studio Manage Extensions**. +The following steps describe how to install the Syncfusion® Blazor extension from **Manage Extensions** in Visual Studio. -1. Open the Visual Studio 2022. +1. Open Visual Studio 2022. -2. Navigate to **Extension ->Manage Extensions** and open the Manage Extensions. +2. Navigate to **Extensions -> Manage Extensions** to open the Manage Extensions window. -3. On the left, click the **Online** tab and type **"Syncfusion® Blazor"** in the **search box**. +3. In the **Online** tab, search for **Syncfusion Blazor**. - ![Online-Manage-Extension-window](images/OnlineExtension.png) + ![Manage Extensions window showing Syncfusion Blazor search results](images/OnlineExtension.png) -4. Click the **Download** button in the **“Syncfusion® Blazor Template Studio”** extensions. +4. Click **Download** for the **Syncfusion Blazor Template Studio** extension. -5. Close all Visual Studio instances after downloading the extensions to begin the installation process. You will see the following VSIX installation prompt. +5. Close all Visual Studio instances to begin the installation process. A VSIX installation prompt appears. - ![VSIX-Installation-Window](images/VSIXinstallation.png) + ![VSIX Installer prompting to modify Visual Studio](images/VSIXinstallation.png) -6. Click the **Modify** button. +6. Click **Modify**. 7. After the installation is complete, open Visual Studio. -8. Now, under the menu **Extensions**, you can use the Syncfusion® extensions from the Visual Studio. +8. In the **Extensions** menu, access the Syncfusion® extensions in Visual Studio. ![SyncfusionMenu](images/SyncfusionMenu.png) ## Install from the Visual Studio Marketplace -The steps below illustrate how to download and install the Syncfusion® Blazor extension from the Visual Studio Marketplace. +The following steps illustrate how to download and install the Syncfusion® Blazor extension from the Visual Studio Marketplace. -1. Download the Syncfusion® Blazor Extensions from the below Visual Studio Marketplace. +1. Download the Syncfusion® Blazor extension from the Visual Studio Marketplace. - [Visual Studio 2022](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.BlazorVSExtension) + [Download the Visual Studio 2022 extension](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.BlazorVSExtension) 2. Close all Visual Studio instances running, if any. -3. Double-click to install the downloaded VSIX file. You will see the VSIX installation prompts with the corresponding installed Visual Studio version checkbox for select the Visual Studio to install extension. +3. Double-click the downloaded VSIX file to install. In the VSIX Installer, select the Visual Studio instance(s) to install the extension. - ![VSIX-Installation-Window](images/VSIXinstallation1.png) + ![VSIX Installer showing Visual Studio instance selection](images/VSIXinstallation1.png) 4. Click the **Modify** button. -5. After the installation is complete, open Visual Studio. You can now use Syncfusion® extensions from the Visual Studio under the **Extensions** menu. +5. After installation completes, open Visual Studio. The Syncfusion® extensions are available under the **Extensions** menu. ![SyncfusionMenu](images/SyncfusionMenu.png) \ No newline at end of file diff --git a/blazor/visual-studio-integration/images/controlssection1.png b/blazor/visual-studio-integration/images/controlssection1.png index 6957cddf514d058cd119131fddf303a1a60b34e3..15c2918205041aa60e266e921fdbd1724bc11dcd 100644 GIT binary patch literal 55093 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

*_t-J&(^q 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 HT~7KJ_M3Aj literal 132089 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%0AE&|vfL9B%Hr2g8@jY%*Up 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 z%0A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 diff --git a/blazor/visual-studio-integration/overview.md b/blazor/visual-studio-integration/overview.md index d80ffcef44..82b645d3f2 100644 --- a/blazor/visual-studio-integration/overview.md +++ b/blazor/visual-studio-integration/overview.md @@ -1,26 +1,26 @@ --- layout: post -title: Overview of Syncfusion Blazor Extension for Visual Studio | Syncfusion -description: Learn here all about introduction on Syncfusion Blazor extension for Visual Studio which made integration ease. +title: Overview of Blazor extension for Visual Studio | Syncfusion +description: Learn here about the Syncfusion Blazor extension for Visual Studio and how it streamlines integration with Syncfusion components. Explore to more details. platform: Blazor -component: Common +control: Common documentation: ug --- -# Overview of Blazor Extension for Visual Studio +# Overview of Blazor extension for Visual Studio -The Syncfusion® Blazor Extension for Visual Studio simplifies the use of the Syncfusion® Blazor components by configuring the Syncfusion® Blazor NuGet packages and themes. We provide separate Blazor extension for both Visual Studio 2022 and Visual Studio 2019. +The Syncfusion® Blazor extension for Visual Studio streamlines working with Syncfusion® Blazor components by configuring the required Syncfusion® NuGet packages and themes. Separate extensions are available for Visual Studio 2022 and Visual Studio 2019. -[Visual Studio 2022](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.BlazorVSExtension) +[Download the Visual Studio 2022 extension](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.BlazorVSExtension) -[Visual Studio 2019](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Blazor-Extension) +[Download the Visual Studio 2019 extension](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Blazor-Extension) -The Syncfusion® Blazor extensions provides the following add-ins in Visual Studio: +The Syncfusion® Blazor extension provides the following add-ins in Visual Studio: -[Project-Template](template-studio): Creates Syncfusion® Blazor applications with required configuration for development with Syncfusion® Blazor component. +[Project template](template-studio): Creates Syncfusion® Blazor applications with required configuration for development with Syncfusion®Visual Blazor component. -[Code Generator](code-generator): Adds Syncfusion® Blazor component code in razor file at required place. +[Code generator](code-generator): Adds Syncfusion® Blazor component code in razor file at required place. -[Convert project](convert-project): Converts an existing Blazor Web Application to a Syncfusion® Blazor Web Application by importing the necessary Syncfusion® NuGet packages. +[Convert project](convert-project): Converts an existing Blazor Web Application to a Syncfusion® Blazor Web Application by adding the required Syncfusion® NuGet packages and theme. -[Upgrade project](upgrade-project): Upgrades the existing Syncfusion® Blazor Web Application from one Essential Studio® version to another version. \ No newline at end of file +[Upgrade project](upgrade-project): Upgrades an existing Syncfusion® Blazor Web Application from one Essential Studio version to another. diff --git a/blazor/visual-studio-integration/scaffolding.md b/blazor/visual-studio-integration/scaffolding.md index d4cf8b7872..4f9db8d2eb 100644 --- a/blazor/visual-studio-integration/scaffolding.md +++ b/blazor/visual-studio-integration/scaffolding.md @@ -1,59 +1,59 @@ --- layout: post -title: Scaffolding in Blazor Application | Syncfusion -description: Learn here about scaffolding using Syncfusion Blazor Extension for Visual Studio to quickly add code to reduce the amount of development time. +title: Scaffolding in Blazor Applications | Syncfusion +description: Learn how to use the Syncfusion Blazor extension for Visual Studio to scaffold pages and code, accelerating data-driven development. Explore to more details. platform: Blazor -component: Common +control: Common documentation: ug --- -# Syncfusion® Blazor Scaffolding +# Syncfusion® Blazor scaffolding -Syncfusion® provides **Visual Studio Scaffolding** for the Syncfusion® Blazor platform, allowing you to quickly add code that interacts with data models, reducing the time required for developing data operations in your application. Scaffolding simplifies the creation of Razor pages and Controller action methods for Syncfusion® Blazor controls such as DataGrid, Charts, Scheduler, Diagram, Tree Grid, Rich Text Editor, Document Editor, and PDF Viewer. +Syncfusion® provides Visual Studio scaffolding for the Syncfusion® Blazor platform to quickly add code that interacts with data models, reducing development time for data operations. Scaffolding simplifies creating Razor pages and controller action methods for Syncfusion® Blazor components such as DataGrid, Charts, Scheduler, Diagram, Tree Grid, Rich Text Editor, Document Editor, and PDF Viewer. -N> Check that at least one Entity Framework model exists, and the application has been compiled once. If no Entity Framework model exists in your application, refer to this [documentation](https://www.freecodecamp.org/news/how-to-create-an-application-using-blazor-and-entity-framework-core-1c1679d87c7e/) to generate the Entity Framework model. After the model file has been added, check that the required DBContext and properties are added. Now, build the application, and try scaffolding. If any changes made in the model properties, rebuild the application once before perform scaffolding. +N> Ensure that at least one Entity Framework Core model exists and that the application has been built once. If a model does not exist, see the Microsoft documentation for creating an [Entity Framework Core model](https://learn.microsoft.com/en-us/ef/core/modeling/). After adding the model, verify that the required DbContext and properties are present. Build the application before running scaffolding. If model properties change, rebuild the application before scaffolding again. -N> The Syncfusion® Blazor Scaffolder is available from `v17.4.0.39` for Blazor server-side application and provided the Scaffolding support to Blazor client-side application from `v18.4.0.39`. +N> The Syncfusion® Blazor Scaffolder is available from `v17.4.0.39` for Blazor Server applications and includes support for Blazor WebAssembly (client) applications starting with `v18.4.0.39`. ## Add a scaffolded item -The steps below assist you to how to add a scaffolded item to your Blazor application. +The following steps describe how to add a scaffolded item to a Blazor application. -N> Before use the Syncfusion® Blazor Scaffolding, check whether the Syncfusion® Blazor Template Studio Extension installed or not in Visual Studio Extension Manager by clicking on the Extensions -> Manage Extensions -> Installed. If this extension not installed, install the extension by follow the steps from the [download and installation](download-and-installation) help topic. +N> Before using the Syncfusion® Blazor scaffolding, verify that the Syncfusion® Blazor Template Studio extension is installed in Visual Studio (Extensions -> Manage Extensions -> Installed). If it is not installed, follow the steps in the [download and installation](download-and-installation) topic. -1. If the application type is **Blazor ServerSide**, right-click the **Pages** folder in the Solution Explorer, click **Add**, and then select **New Scaffolded Item..** +1. For a **Blazor Server** application, right-click the **Pages** folder in Solution Explorer, select **Add**, and then choose **New Scaffolded Item...** ![Scaffolded add-in from server project](images/Add_scaffold_Serverside.png) - If the application type is **Blazor Hosted**, right-click the **Controllers** folder from **{Project Name}.Server** application in the Solution Explorer, click **Add**, and then select **New Scaffolded Item**. + If the application type is **Blazor Hosted**, right-click the **Controllers** folder from **{Project Name}.Server** application in the Solution Explorer, click **Add**, and then select **New Scaffolded Item...**. ![Scaffolded add-in from the hosted project](images/Add_scaffold_hosted.png) -2. In the **Add New Scaffolded item** dialog, select **Syncfusion® Blazor Scaffolder** and then click **‘Add’**. +2. In the **Add New Scaffolded Item** dialog, select **Syncfusion Blazor Scaffolder** and then click **Add**. ![Choose Syncfusion Scaffolding from Visual Studio Add scaffold dialog](images/Syncfusion_scaffolder.png) -3. In the Syncfusion® UI Scaffolder dialog, select the desired control to perform scaffolding, and then click **Next**. +3. In the Syncfusion® UI Scaffolder dialog, select the desired component to scaffold, and then click **Next**. ![Choose required control](images/Control_Window.png) -4. The Syncfusion® UI Scaffolder dialog for the selected control will be displayed. As per the application requirements, follow these steps to set up your application. +4. The Syncfusion® UI Scaffolder dialog for the selected component appears. Follow these steps to configure the application. **Select Data Source Type** - 1. Local Data (default selection) + 1. Local data (default) - To set up your application with local data, first enter the **Controller/Service name** and then enter the **Razor page name**. Next, select the required **Model class** for the active application and choose the relevant **Data context class**. Finally, click **Next** to continue. + To use local data, enter the **Controller/Service name** and the **Razor page name**. Then select the required **Model class** and the corresponding **Data context class**. Click **Next** to continue. ![Choose required Model](images/Model_Window_Local.png) - N> We are introducing Adaptor types in Blazor scaffolding for remote data. + N> Adaptor types are available in Blazor scaffolding for remote data. - 2. Remote Data + 2. Remote data - To set up your application with remote data, first enter the **Razor page name**, choose the **Adaptor type**, and then enter the valid **URL**. Next, enter the **TValue**. Finally, click **Next** to continue. + To use remote data, enter the **Razor page name**, choose an **Adaptor type**, and provide a valid **URL**. Then specify the **TValue**. Click **Next** to continue. N> In the DataGrid and TreeGrid controls, when selecting the **URL adaptor** in the **Adaptor type**, an additional **Remote service** option will appear. You need to select either the **Localhost URL** or **API URL**. If you select the Localhost URL, enter the **Controller/Service** name. Then, select the required Model class for the active application and choose the relevant **Data context class**. Finally, click **Next** to continue. If you select the **API URL**, enter the valid **URL**. Next, enter the **TValue**. Finally, click **Next** to continue. @@ -65,67 +65,67 @@ N> Before use the Syncfusion® Blazor Scaffolding, check whether the Syncfusion However, if you wish to perform CRUD operations, you need to provide a valid link that handles these operations. This link should point to an endpoint or service capable of managing the database operations required by your application. By providing this link, you ensure that your application can effectively interact with the back-end service to perform CRUD operations. - For **ServerSide Application**, both Local data and Remote data types will be available. + For a **Blazor Server** application, both local data and remote data types are available. ![Choose required selected control features for the serverside project](images/Feature_Window_serverside.png) - For **Hosted Application**, Remote data type only available. + For a **Hosted Application**, only the remote data type is available. ![Choose required selected control features for the hosted project](images/Fetaure_window_hosted.png) -5. In the Syncfusion® UI Scaffolder, the dialog for the selected control feature will open. Choose the required features, update the necessary data fields, and then click **Add**. +5. In the Syncfusion® UI Scaffolder, the dialog for the selected component features opens. Choose the required features, update the necessary data fields, and then click **Add**. ![Choose required selected control features for the hosted project](images/Fetaure_window_hosted_feature.png) -6. With the selected features of the Syncfusion® control code snippet, the **Controller/Service** file and the corresponding **Razor** files are generated. +6. Based on the selected features, the **Controller/Service** file and the corresponding **Razor** files are generated. - If you select **Local Data**, the service file and razor file will be added to the application. + If **Local data** is selected, the service file and Razor file are added to the application. ![Required Controller and Razor files added in the project for the selected control](images/Files_for_local_data.png) - If you select **Remote Data with Localhost URL**, the controller file and razor file will be added to the application. + If **Remote data with Localhost URL** is selected, the controller file and Razor file are added to the application. ![Required Controller and Razor files added in the project for the selected control](images/Files_for_remote_data.png) - If you choose **Remote Data with Web API adaptor types**, the razor file will be added to the application. + If **Remote data with Web API adaptor** is selected, the Razor file is added to the application. ![Required Controller and Razor files added in the project for the selected control](images/Files_for_remote_data_adaptor.png) 7. Then, add navigation to the created razor file based on your requirement to open on the webpage. -8. If you installed the trial setup or NuGet packages from nuget.org you must register the Syncfusion® license key to your application since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/overview#how-to-generate-syncfusion-license-key) to generate and register the Syncfusion® license key to your application. Refer to this [blog](https://www.syncfusion.com/blogs/post/whats-new-in-2018-volume-2.aspx?_ga=2.11237684.1233358434.1587355730-230058891.1567654773) post for understanding the licensing changes introduced in Essential Studio®. +8. If you installed the trial setup or NuGet packages from nuget.org you must register the Syncfusion® license key to your application since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/overview#how-to-generate-syncfusion-license-key) to generate and register the Syncfusion® license key to your application. Refer to this [blog](https://www.syncfusion.com/blogs/post/whats-new-in-2018-volume-2) post for understanding the licensing changes introduced in Essential Studio®. -## Syncfusion® Blazor Command-line Scaffolding +## Syncfusion® Blazor command-line scaffolding -The **Scaffolding command-line** for Syncfusion® Blazor allows you to quickly add code that interacts with data models, reducing the time required to develop data operations in your application. Scaffolding simplifies the creation of view files and Controller action methods for Syncfusion® Blazor controls such as DataGrid, Charts, Scheduler, Diagram, Tree Grid, Rich Text Editor, Document Editor, and PDF Viewer. +The Syncfusion® Blazor command-line scaffolding helps quickly add code that interacts with data models, reducing the time required to develop data operations. It simplifies creating view files and controller action methods for Syncfusion® Blazor components such as DataGrid, Charts, Scheduler, Diagram, Tree Grid, Rich Text Editor, Document Editor, and PDF Viewer. N> Verify that at least one Entity Framework model exists. If your application lacks an Entity Framework model, use this [documentation](https://www.freecodecamp.org/news/how-to-create-an-application-using-blazor-and-entity-framework-core-1c1679d87c7e/) to create one. After you've added the model file, double-check that the necessary DBContext and properties have been added. Now, build the application and experiment with scaffolding. If any changes made in the model properties, rebuild the application once before perform scaffolding. -## Install Command-line Scaffolding +## Install command-line scaffolding -Install **syncfusion.scaffolding** tool globally by using below command. +Install the **syncfusion.scaffolding** tool globally using the following command. ```dotnet tool install -g syncfusion.scaffolding``` -## Update Command-line scaffolding +## Update command-line scaffolding -Update **syncfusion.scaffolding** tool globally by using below command. +Update the **syncfusion.scaffolding** tool globally using the following command. ```dotnet tool update -g syncfusion.scaffolding``` -## Add a scaffolded item from command-line +## Add a scaffolded item from the command line -The steps below will assist you to how to add a scaffolded item from command-line to your Blazor application. +The following steps describe how to add a scaffolded item from the command line to a Blazor application. -N> Before adding the scaffolded item from command-line, check whether the **dotnet-aspnet-codegenerator** tool is installed or not by **dotnet tool list -g** command in command prompt. if it is not installed, then install **dotnet-aspnet-codegenerator** tool globally by using this command **dotnet tool install -g dotnet-aspnet-codegenerator**. +N> Before adding a scaffolded item from the command line, verify that the **dotnet-aspnet-codegenerator** tool is installed by running `dotnet tool list -g`. If it is not installed, install it globally with `dotnet tool install -g dotnet-aspnet-codegenerator`. -1. After installed syncfusion.scaffolding tool, we can invoke syncfusion_scaffold command and it shows the available controls +1. After installing the syncfusion.scaffolding tool, run the `syncfusion_scaffold` command to view available components. **syncfusion_scaffold** ![CommandLine Scaffold Available Controls](images/AvailableControl.png) -2. To add a scaffolded item from command-line you must invoke syncfusion_scaffold application like below syntax +2. To add a scaffolded item from the command line, use the following syntax. **syncfusion_scaffold [control][arguments]** @@ -147,17 +147,17 @@ N> Before adding the scaffolded item from command-line, check whether the **dotn | --is-all-day | Set IsALLDay for Scheduler Event. | Scheduler | | -did|--diagram-id | Id of Diagram layout. | Diagram | -3. If you run the syncfusion_scaffold [control] command, the parameters of control shown like below image. +3. Running `syncfusion_scaffold [control]` displays the available parameters for the specified component. ![control parameter details](images/controlparameter.png) -4. Run the following command to generate controller and view files through command-line by passing required arguments of the given control. +4. Run the following command to generate controller and view files from the command line by passing the required arguments for the specified component. ```syncfusion_scaffold {controlName} --project "{projectFileNamewithPath}" --model {model} -dc {dbContext} -cname {controllerName} -vname {viewName} [controlMantoryParameter] [controlMantatoryParameterValue]``` ![CommandLine Scaffold](images/commandline.png) -5. As we can see controller and view files generated successfully and also added the Syncfusion® NuGet packages and styles which is required to render Syncfusion® control. +5. After generation, the controller and view files are created successfully, and the required Syncfusion® NuGet packages and styles are added to render the component. ![Blazor added Files](images/blazorfile.png) @@ -165,10 +165,10 @@ N> Before adding the scaffolded item from command-line, check whether the **dotn -## How to render Syncfusion® control? +## How to render a Syncfusion® component -Refer to the following UG links to render Syncfusion® control after performing scaffolding: +Refer to the following user guide links to render a Syncfusion® component after scaffolding: -WebAssembly App: [Configure Blazor components using Syncfusion® Blazor Component NuGet Package](https://blazor.syncfusion.com/documentation/getting-started/blazor-webassembly-visual-studio) +Blazor WebAssembly App: [Configure Blazor components using the Syncfusion® Blazor component NuGet package](https://blazor.syncfusion.com/documentation/getting-started/blazor-webassembly-visual-studio) -Blazor Server App: [Configure Blazor components using Syncfusion® Blazor Component NuGet Package](https://blazor.syncfusion.com/documentation/getting-started/blazor-server-side-visual-studio) \ No newline at end of file +Blazor Server App: [Configure Blazor components using the Syncfusion® Blazor component NuGet package](https://blazor.syncfusion.com/documentation/getting-started/blazor-server-side-visual-studio) diff --git a/blazor/visual-studio-integration/template-studio.md b/blazor/visual-studio-integration/template-studio.md index f3b8977dd7..9d2016e64c 100644 --- a/blazor/visual-studio-integration/template-studio.md +++ b/blazor/visual-studio-integration/template-studio.md @@ -1,21 +1,21 @@ --- layout: post -title: Template Studio in Blazor - Syncfusion -description: Learn here about how to create the Blazor application using Syncusion® Blazor Components with the help of template studio. +title: Template Studio for Blazor | Syncfusion +description: Learn here about how to create a Blazor application using Syncfusion Blazor components with the Template Studio in Visual Studio 2022. Explore to more details. platform: Blazor -component: Common +control: Common documentation: ug --- # Syncfusion® Blazor Template Studio -Syncfusion® provides the Blazor Template Studio, which allows you to create a Syncfusion® Blazor application using Syncfusion® components. The Syncfusion® Blazor app is created with the required Syncfusion® NuGet references, namespaces, styles, and component render code. The Template Studio includes an easy-to-use project wizard that guides you through the process of creating an application with Syncfusion® components. +Syncfusion® provides the Blazor Template Studio, which creates a Syncfusion® Blazor application preconfigured with the required Syncfusion® NuGet packages, namespaces, styles, and component render mode. The Template Studio offers an intuitive project wizard to guide creation of an application with Syncfusion® components. -The steps below will assist you to create your **Syncfusion® Blazor Application** through **Visual Studio 2022**: +The steps below will assist you to create your **Syncfusion Blazor Application** through **Visual Studio 2022**: -> **Note:** The Syncfusion® Blazor Extensions for Visual Studio 2019 are available on Essential Studio® release "20.3.0.56" and below. +> **Note:** The Syncfusion® Blazor extensions for Visual Studio 2019 are available only for Essential Studio® versions 20.3.0.56 and earlier. -N> Before use the Syncfusion® Blazor Project Template, check whether the Syncfusion® Blazor Template Studio Extension installed or not in Visual Studio Extension Manager by clicking on the Extensions -> Manage Extensions -> Installed. If this extension not installed, install the extension by follow the steps from the [download and installation](https://blazor.syncfusion.com/documentation/visual-studio-integration/download-and-installation) help topic. +N> Before use the Syncfusion® Blazor Project Template, check whether the Syncfusion® Blazor Template Studio Extension installed or not in Visual Studio Extension Manager by clicking on the Extensions -> Manage Extensions -> Installed. If it is not installed, follow the steps in the [download and installation](https://blazor.syncfusion.com/documentation/visual-studio-integration/download-and-installation) topic. 1. Open Visual Studio 2022. @@ -29,7 +29,7 @@ N> Before use the Syncfusion® Blazor Project Template, check whether the Syncfu **Option 2** - Choose **File -> New -> Project** from the menu. This launches a new dialogue for creating a new application. Syncfusion® templates for Blazor can be found by filtering the application type for **Syncfusion®** or by entering **Syncfusion®** as a keyword in the search option. + Choose **File -> New -> Project** from the menu. This opens the new project dialog. Find Syncfusion® templates for Blazor by selecting the **Syncfusion** project type filter or by entering **Syncfusion** in the search box. ![CreateNewWindow](images/createnewwindow.png) @@ -45,7 +45,7 @@ N> Before use the Syncfusion® Blazor Project Template, check whether the Syncfu Choose one of the Syncfusion® Blazor application types based on the version of the .NET SDK you are using. - | .NET SDK version | Supported Syncfusion® Blazor Application Type | + | .NET SDK version | Supported Syncfusion® Blazor application type | | ---------------- | -------------------------------------------- | | [.NET 9.0](https://dotnet.microsoft.com/en-us/download/dotnet/9.0), [.NET 8.0](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) | Syncfusion® Blazor Web App | | [.NET 9.0](https://dotnet.microsoft.com/en-us/download/dotnet/9.0), [.NET 8.0](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) | Syncfusion® Blazor WebAssembly App | @@ -76,11 +76,11 @@ N> Before use the Syncfusion® Blazor Project Template, check whether the Syncfu ![WebAppTemplate](images/webapptemplate.png) - In the **Syncfusion® Blazor WebAssembly App** application type, you can choose Progressive Web Application. + In the **Syncfusion Blazor WebAssembly App** project type, choose Progressive Web Application (PWA). ![WASMTemplate](images/wasmtemplate.png) - > **Note:** The Progressive Web Application will be enabled if .NET 8.0 version or higher is installed. + > **Note:** The Progressive Web Application option is available when .NET 8.0 or later is installed. 5. Click either **Next** or the **Controls** tab. The Syncfusion® Blazor components you can add to the application are listed. @@ -96,22 +96,22 @@ N> Before use the Syncfusion® Blazor Project Template, check whether the Syncfu N> **Note:** Choose at least one control to enable the Features and Configuration tab. -6. Click either **Next** or the **Features** tab, and you will see the features listed for the selected controls. You can choose the required features. +6. Click **Next** or select the **Features** tab to review and choose features for the selected controls. -7. Click **Next** or the **Configuration** tab to load the Configuration section. You can choose the required (.NET 9.0 and .NET 8.0), themes, https configuration, localization option, authentication type, Blazor Web App, and Blazor Web Assembly application types. +7. Click **Next** or select the **Configuration** tab. Configure the target .NET version (.NET 9.0 or .NET 8.0), theme, HTTPS configuration, localization, authentication type, and options specific to Blazor Web App or Blazor WebAssembly Application types. Depending on your Syncfusion® Blazor Application Type, refer to the table below for supported authentication types. - | Syncfusion® Blazor Application Type | Supported Authentication Types | + | Syncfusion® Blazor application type | Supported authentication types | | ------------- | ------------- | - | Syncfusion® Blazor Web App | None and Individual Accounts | - | Syncfusion® Blazor WebAssembly App | None, Individual Accounts and Microsoft Identity Platform | + | Syncfusion® Blazor Web App | None, Individual Accounts | + | Syncfusion® Blazor WebAssembly App | None, Individual Accounts, Microsoft Identity Platform | If you choose the **Blazor Web App** application type, you can customize the Interactivity type and Interactivity location options. ![WebAppConfiguration](images/webappconfig.png) - If you choose the **Blazor Web Assembly App** application type, you can customize the Progressive Web Application option. + If you choose the **Blazor WebAssembly App** application type, you can enable or disable the Progressive Web Application option. ![WASMConfiguration](images/wasmconfig.png) @@ -121,11 +121,11 @@ N> Before use the Syncfusion® Blazor Project Template, check whether the Syncfu ![ProjectDetails](images/rightsideprojectdetails.png) -8. Click **Create** button. The Syncfusion® Blazor application has been created. The created Syncfusion® Blazor app has the Syncfusion® NuGet packages, styles, and the render code for the selected Syncfusion® component. +8. Click **Create**. The Syncfusion® Blazor application is created with the required Syncfusion® NuGet packages, styles, and the render code for the selected Syncfusion® components. ![Readme](images/readme.png) -9. The Syncfusion® Blazor application configures with most recent Syncfusion® Blazor NuGet packages version, selected style, namespaces, selected authentication, and component render code for Syncfusion® components. +9. The generated project is configured with the latest Syncfusion® Blazor NuGet package version, selected theme, namespaces, chosen authentication, and component render code for the selected components. 10. If you installed the trial setup or NuGet packages from nuget.org you must register the Syncfusion® license key to your application since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/overview#how-to-generate-syncfusion-license-key) to generate and register the Syncfusion® license key to your application. Refer to this [blog](https://www.syncfusion.com/blogs/post/whats-new-in-2018-volume-2.aspx) post for understanding the licensing changes introduced in Essential Studio®.