ASP.NET Core Blazor简介和快速入门三(布局和路由)

简介: 本文由码农刚子撰写,系统介绍Blazor中的布局、路由与条件渲染。涵盖布局组件创建与嵌套、默认布局应用、页面不使用布局的方法,以及@if和@foreach实现动态UI,助力掌握Blazor核心开发技能。

大家好,我是码农刚子本文介绍了Blazor中的布局、路由和条件渲染功能。在布局方面,详细讲解了如何创建和应用布局组件(继承LayoutComponentBase),包括默认布局MainLayout的使用、嵌套布局的实现方式以及如何控制特定页面不应用布局(如登录页)。在路由和导航部分,简要提及了基本配置方法。最后,重点阐述了条件渲染(@if语句)和循环渲染(@foreach等)的语法和实际应用场景,通过学生信息列表等示例展示了数据绑定和动态UI生成的实现方式。这些核心功能共同构成了Blazor组件化开发的基础框架。

一、创建和应用Blazor 布局

网站应用往往有许多公共的视图部分,比如顶部导航nav,底部的footer,管理系统的左边的menu菜单等等。Layout可以轻松实现以上的效果。

Blazor 布局是一个 Razor 组件,它与引用该布局的组件共享标记。 布局可以使用数据绑定依赖关系注入和组件的其他功能。

1、创建布局(可以理解为母版页)

新建一个razor文件,文件顶部使用@inherits LayoutComponentBase 表示继承自LayoutComponentBase ,说明这是个母版页,使@Body作为占位。

@inherits LayoutComponentBase
<PageTitle>Doctor Who® Database</PageTitle>
<header>
    <h1>Doctor Who® Database</h1>
</header>
<nav>
    <a href="main-list">Main Episode List</a>
    <a href="search">Search</a>
    <a href="new">Add Episode</a>
</nav>
@Body
<footer>
    @TrademarkMessage
</footer>
@code {
    public string TrademarkMessage { get; set; } ="CSharp精选营";
}

2、MainLayout 组件

在从 Blazor 项目模板创建的应用中,MainLayout 组件就是应用的默认布局

Blazor 的 CSS 隔离功能将独立 CSS 样式应用于 MainLayout 组件。 按照惯例,样式由相同名称的随附样式表 MainLayout.razor.css 提供。

3、应用布局

在razor文件顶部申明“@layout 模板页名”来设置母版页,

如果一个页面没有设置模板页,(就像blazor默认项目那样),他就会使用在app.razor文件中定义的默认模板页

如何不设置任何模板页?

比如我们的登录的页面是不需要加通用模板的,通过@if 控制 RouteView的DefaultLayout即可

<Router AppAssembly="@typeof(App).Assembly">
  <Found Context="routeData">
    @if (routeData.PageType == typeof(Pages.LayoutSample))
    {
      <RouteView RouteData="@routeData" />
    }
    else
    {
      <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
      <FocusOnNavigate RouteData="@routeData" Selector="h1" />
    }
  </Found>
  <NotFound>
    <PageTitle>Not found</PageTitle>
    <LayoutView Layout="@typeof(MainLayout)">
      <p role="alert">Sorry, there's nothing at this address.</p>
    </LayoutView>
  </NotFound>
</Router>

4、嵌套布局

组件可以引用一个布局,该布局又可以引用另一个布局。 例如,嵌套布局可用于创建多级菜单结构。

以下示例演示如何使用嵌套布局:

@inherits LayoutComponentBase
@layout ProductionsLayout
<PageTitle>Doctor Who® Database</PageTitle>
<header>
    <h1>Doctor Who® Database</h1>
</header>
<nav>
    <a href="main-episode-list">Main Episode List</a>
    <a href="episode-search">Search</a>
    <a href="new-episode">Add Episode</a>
</nav>
@Body
<footer>
    @TrademarkMessage
</footer>
@code {
    public string TrademarkMessage { get; set; } =
        "CSharp精选营";
}

ProductionsLayout 组件包含顶级布局元素,其中包含有标头 (...) 和页脚 (...) 元素。 带有DoctorWhoLayout组件的 Episodes 会在@Body出现的位置显示。

@inherits LayoutComponentBase
<header>
    <h1>Productions</h1>
</header>
<nav>
    <a href="main-production-list">Main Production List</a>
    <a href="production-search">Search</a>
    <a href="new-production">Add Production</a>
</nav>
@Body
<footer>
    Footer of Productions Layout
</footer>

以下呈现的 HTML 标记由前面的嵌套布局生成:

<header><h1>Productions</h1></header>
<nav><a href="main-production-list">Main Production List</a>
    <a href="production-search">Search</a>
    <a href="new-production">Add Production</a>
</nav>
<header><h1>Doctor Who® Database</h1></header>
<nav><a href="main-episode-list">Main Episode List</a>
    <a href="episode-search">Search</a>
    <a href="new-episode">Add Episode</a>
</nav>
<footer>CSharp精选营</footer>
<footer>
    Footer of Productions Layout
</footer>

更多参考:

https://learn.microsoft.com/zh-cn/aspnet/core/blazor/components/layouts?view=aspnetcore-9.0

二、路由配置和导航

请点击查看此文章: ASP.NET Core Blazor 路由配置和导航

三、条件渲染和循环渲染

第一章中已经讲过了Blazor的语法。

1、Blazor 条件渲染

Blazor 中的 @if 语法用于根据条件动态渲染页面元素。它类似于 C# 的 if 语句,但专门用于处理 UI 渲染。请看以下示例:

@if (isLoading)
{
   <p>加载中...</p>
}
else
{
   <p>加载完成!</p>
}
@code {
   private bool isLoading = true;
   protected override void OnInitialized()
   {
       // 模拟加载完成
       Task.Delay(2000).ContinueWith(_ =>
       {
           isLoading = false;
           InvokeAsync(StateHasChanged);
       });
   }
}

你可以嵌套多个 @if 或结合 else if 使用:

@if (userRole == "Admin")
{
   <p>欢迎管理员!</p>
}
else if (userRole == "User")
{
   <p>欢迎普通用户!</p>
}
else
{
   <p>请登录。</p>
}
@code {
   private string userRole = "Admin";
}

2、Blazor 循环渲染

下面我们有一个list需要显示多个学生信息,@for,@do…while,@while 与foreach类似这里就不在赘述

<h3>用户列表</h3>
<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Age</th>
      <th>Gender</th>
    </tr>
  </thead>
  <tbody>
    @foreach (var item in list)
    {
      <tr>
        <td>@item.Name</td>
        <td>@item.Age</td>
        @switch (item.Gender)
        {
          case 0:
            {
              <td>男</td>
              break;
            }
          case 1:
            {
              <td>女</td>
              break;
            }
          case 2:
            {
              <td>未知</td>
              break;
            }
        }
      </tr>
    }
  </tbody>
</table>
@code {
  List<User> list = new List<User>();
  User User1 = new User()
    {
      Name = "John",
      Age = 20,
      Gender = 2,
    };
  User User2 = new User()
    {
      Name = "Sub",
      Age = 22,
      Gender = 0,
    };
  protected override void OnInitialized()
  {
    list.Add(User1);
    list.Add(User2);
  }
  public class User
  {
    public string Name { get; set; } = string.Empty;
    public int Age { get; set; }
    public int Gender { get; set; } // 0: 男, 1: 女, 2: 未知
    
  }
}


以上就是《ASP.NET Core Blazor简介和快速入门三(布局和路由)》的所有内容,感谢你的阅读,希望对你有所收获。关注、点赞,持续分享

相关文章
|
传感器 数据采集 物联网
MQTT 的 QoS 等级:QoS 0、QoS 1、QoS 2
MQTT 的 QoS 等级:QoS 0、QoS 1、QoS 2
4864 0
WPF—多重绑定和跨层级绑定
WPF—多重绑定和跨层级绑定
|
5月前
|
运维 安全 BI
ERPNext 介绍、安装和维护建议
ERPNext 是一款开源企业资源计划系统,功能涵盖财务、销售、采购、库存等多个模块,支持多组织架构与高度自定义。本文介绍其核心特性,并结合实战经验,提供基于 Websoft9 的简便部署方案及后期维护建议,助力中小企业快速搭建稳定高效的管理系统。
1410 0
|
4月前
|
人工智能 自动驾驶 物联网
AI 来当“交通警察”:如何优化 5G 网络资源分配?
AI 来当“交通警察”:如何优化 5G 网络资源分配?
154 9
|
设计模式 前端开发 C#
WPF 项目中 MVVM模式 的简单例子说明
本文通过WPF项目中的加法操作示例,讲解了MVVM模式的结构和实现方法,包括数据模型、视图、视图模型的创建和数据绑定,以及命令的实现和事件通知机制。
|
开发框架 前端开发 C#
从零开始学 Blazor 创建 Web 应用,入门指南超详细!带你轻松开启精彩的开发之旅!
【8月更文挑战第31天】在互联网时代,Web应用开发愈发重要,Blazor作为新兴框架,允许使用C#和.NET技术构建交互式Web应用,提高开发效率与代码可维护性。本文将从零开始引导读者了解Blazor的基本概念,安装设置步骤,项目创建及运行方法。通过简单的示例介绍Blazor的基本结构,包括Pages、Shared等文件夹用途,以及Program.cs文件的功能。同时,还将演示如何创建Razor页面和组件,实现数据绑定与事件处理,帮助读者快速入门Blazor开发。
1617 0
|
存储 消息中间件 运维
从单体到微服务:架构演进中的技术挑战与解决方案
在软件开发的过程中,系统架构的选择对项目的成功与否起到至关重要的作用。本文将深入探讨从单体架构向微服务架构演进过程中所遇到的技术挑战,并提供相应的解决方案。
492 27
|
C# Android开发 iOS开发
9 个 .NET UI 框架,您的选择是?
介绍 9 款 .NET UI 框架,有你的菜麽。
2583 1
9 个 .NET UI 框架,您的选择是?

热门文章

最新文章