Blazor基础知识:Visual Studio 2022 中的Blazor开发入门

目录

设置Visual Studio for Blazor开发

创建第一个Blazor Server项目

项目概述——浏览源代码

首次启动Blazor应用程序

是什么使Blazor组件成为页面?

编辑Blazor组件

使用.NET热重载


Visual Studio 2022中的Blazor入门:设置开发环境、创建第一个Blazor Server项目、导航项目结构并了解开发生命周期。

 Blazor基础知识系列的第一篇文章中,我们了解了Blazor是什么、不是什么,以及它的工作原理。

现在,我们已准备好设置开发环境,创建我们的第一个 Blazor Server项目,浏览项目结构并了解开发生命周期。

设置Visual Studio for Blazor开发

可以使用首选的IDE进行Blazor开发。但是,我建议使用Visual Studio以获得最佳的Blazor开发工具支持。

Visual Studio Community Edition 免费供个人使用,您可以将其用于100万美元以下公司的商业开发中。

对于新的或现有的Visual Studio安装,请确保已安装ASP.NETWeb开发工作负载。开始使用Blazor开发所需的一切都包含在此工作负载中。

创建第一个Blazor Server项目

Visual Studio中,我们创建一个新项目,然后选择Blazor Server应用项目模板。

对于第一个项目,我建议选择Blazor Server而不是Blazor WebAssembly,因为项目结构更简单,并且在Blazor开发旅程的后期使用Blazor WebAssembly项目会很容易。

为项目命名,在硬盘驱动器上选择一个位置,然后按下一步按钮转到其他信息对话框。

其他信息对话框中,选择最新版本的.NET作为框架。

我们不需要对此项目进行身份验证,但支持的选项包括个人帐户、Microsoft标识平台Windows身份验证。当您需要实现身份验证时,这些模板很有价值。

我们将使用HTTPS,不需要Docker,并希望在Program.cs文件中使用顶级语句。可以在对话框中保留所有默认值,然后按创建按钮,Visual Studio 为您创建项目。

项目概述——浏览源代码

Blazor Server项目由单个项目组成。当然,您可以像使用任何其他应用程序类型一样向其他.NET项目添加依赖项。

数据文件夹包含Blazor组件中使用的数据类型和服务。这些文件不包含任何特定于Blazor的内容。例如,该WeatherForecastService类如下所示:

public class WeatherForecastService
{
  private static readonly string[] Summaries = new[]
  {
      "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", 
      "Sweltering", "Scorching"
  };

  public Task<WeatherForecast[]> GetForecastAsync(DateOnly startDate)
  {
      return Task.FromResult(Enumerable.Range(1, 5).Select(index => 
      new WeatherForecast
      {
          Date = startDate.AddDays(index),
          TemperatureC = Random.Shared.Next(-20, 55),
          Summary = Summaries[Random.Shared.Next(Summaries.Length)]
      }).ToArray());
  }
}

它包含一个随机生成该WeatherForecast类型的对象并返回列表的GetForecastAsync方法。

用于Blazor应用程序的常规对象和数据类型也可以位于不同的项目中,并作为项目引用添加到Blazor应用程序中。在希望与另一个(可能是现有的)应用程序共享数据对象或服务的场景中,这是有意义的。

Shared”文件夹包含可在不同页面上使用的Blazor组件。默认模板还会将MainLayout布局组件放在Shared文件夹中。在我的项目中,我创造一个专用文件夹,用于保存所有布局组件,但这取决于开发人员的偏好。

Pages 文件夹包含充当页面的Blazor组件。我们稍后将更详细地探讨一个页面。

wwwroot 文件夹包含可从正在运行的Web应用程序访问的静态资产。它包含图像,字体,CSS库和自定义CSS定义。

项目根文件夹包含以下文件:

  • _Imports.razor:此文件包含所有 using 语句,这些语句导入所有Blazor组件中可用的命名空间。除了ASP.NET Core命名空间之外,它还包括两个using语句,特定于项目的命名空间。
  • App.razor:此文件包含路由器定义。路由在Blazor中按约定完成。我们不需要为要创建的每条路由添加条目。但是,您可以指定现有布局的默认布局页面和不存在的页面的路由。对于大多数初学者项目,我们不会更改此文件的内容。
  • Program.cs:此文件包含启动.NET应用程序所需的ASP.NET Core代码。在这里,您将服务注册到依赖注入容器,添加中间件,设置路由并最终启动应用程序。

首次启动Blazor应用程序

在仔细查看Blazor组件和页面之前,让我们先启动应用程序,大致了解应用程序提供的功能。在Visual Studio中,可以使用 F5 启动应用程序。

Visual Studio启动本地Web服务器,并从本地端口为应用程序提供服务。

应用程序具有在MainLayout.razor文件中定义的两列布局。该菜单包含指向三个页面的链接:索引页、计数器页和FetchData页。

“Fetch Data菜单将我们引导至“FetchData”页面,该页面包含一个包含四列的表和前面看到的WeatherData类的数据。

是什么使Blazor组件成为页面?

Blazor使用指令作为简化开发的智能工具。指令以 @符号开头,后跟指令名称。让我们看一下Pages/FetchData.razor组件。

@page "/fetchdata"
@using BlazorDemo.Data
@inject WeatherForecastService ForecastService

@page指令以声明方式将组件定义为页面。它还将页面添加到路由器,并使用定义为page指令参数的URL对其进行访问。

@using指令允许我们导入可以在整个组件中使用的命名空间。例如,FetchData组件使用BlazorDemo.Data命名空间,其包含在项目的/Data文件夹中定义的数据对象。

@inject指令提供依赖项容器中类型的实例。它是Blazor组件的依赖项注入机制。在此示例中,我们注入WeatherForecastService类型并使创建的实例作为ForecastService变量在整个组件中可用。

<PageTitle>Weather forecast</PageTitle>

PageTitle组件是一个组件,而不是一个指令。但是,它同样有用。它允许我们方便地定义浏览器选项卡或窗口中显示的页面标题。

编辑Blazor组件

我们打开FetchData.razor文件以编辑Blazor组件。

首先,让我们探讨一下Blazor组件的结构。模板部分使用纯HTML和一些C#代码片段。C#代码始终以@符号开头。

@if (forecasts == null)
{
  <p><em>Loading...</em></p>
}
else
{
  <table class="table">
    <thead>
      <tr>
        <th>Date</th>
        <th>Temp. (C)</th>
        <th>Temp. (F)</th>
        <th>Summary</th>
      </tr>
      </thead>
      <tbody>
        @foreach (var forecast in forecasts)
        {
          <tr>
            <td>@forecast.Date.ToShortDateString()</td>
            <td>@forecast.TemperatureC</td>
            <td>@forecast.TemperatureF</td>
            <td>@forecast.Summary</td>
          </tr>
        }
      </tbody>
  </table>
}

例如,if/else检查数据是否已加载。如果有数据,组件将显示HTML表,否则将显示正在加载...”发短信。

@code {
  private WeatherForecast[]? forecasts;

  protected override async Task OnInitializedAsync()
  {
    forecasts = await ForecastService.GetForecastAsync(
        DateOnly.FromDateTime(DateTime.Now));
  }
}

模板部分下方是用@code指令引入的代码块。它包含支持组件模板的C#类。我们可以定义可以在模板中访问的变量, 例如此示例中的forecasts变量。

C#类使用回调方法将其挂钩到Blazor组件的生命周期中。此示例使用该OnInitializedAsync方法执行代码以从服务加载数据 当组件已初始化时。

正如你所看到的,绑定机制对开发人员非常友好。我们可以在模板的代码块中使用@符号为前缀的变量。例如,我们看到的foreach,其循环通过所有预测项目,对于每个项目,它会向HTML表添加一行。

我们还可以在数据对象的属性上使用方法,例如ToShortDateString格式化输出。

使用.NET热重载

虽然单页Web应用程序通常在项目开始时启动速度非常快,但添加每个组件和每个页面通常需要更长的时间。

幸运的是,基于.NET平台,我们可以在使用Blazor组件时使用.NET热重载

例如,可以注释掉FetchData组件表中的一列,然后使用Visual Studio工具栏中的火焰图标或按键盘快捷键 Alt+F10 执行.NET热重载。

使用.NET热重载时,应用程序会继续运行,并在运行时修补DLL您可以立即看到Web浏览器中反映的更改。

它允许快速开发,因为开发人员的生命周期非常短。

但是,请注意,目前并不支持所有操作。根据更改,您可能仍需要不时重新启动应用程序。但它绝对可以节省日常Blazor组件的大量时间发展。

https://www.telerik.com/blogs/blazor-basics-getting-started-blazor-development-visual-studio-2022

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值