首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

.NET8 Blazor 从入门到精通:(三)类库和表单

编程知识
2024年08月19日 16:28

目录

Razor 类库

这里只对 RCL 创建和使用的做一些简单的概述,详细内容参考官方文档 使用 Razor 类库 (RCL) 中的 ASP.NET Core Razor 组件

创建

创建 Razor 类库跟创建普通类库步骤一样,关键步骤如下:

  • 从 ASP.NET Core 项目模板列表中选择“Razor 类库”
  • 在“其他信息”对话框中,请勿选择“支持页面和视图”

使用

在项目中使用 RCL 中组件的方法跟使用普通类库的方法一样:

  • 使用包含 RCL 命名空间的完整组件类型名称
  • 如果 Razor 的 @using 指令声明了 RCL 的命名空间,则可以使用不含 RCL 命名空间的名称添加各个组件。 使用以下方法:
    • 将 @using 指令添加到各个组件
    • 将 @using 指令添加到 _Imports.razor 文件
      • 在顶级 _Imports.razor 文件中包含 @using 指令,使库的组件可用于整个项目。
      • 将指令添加到任何级别的 _Imports.razor 文件,将命名空间应用于文件夹中的单个组件或一组组件。

使可路由组件可从 RCL 获取

若要使 RCL 中的可路由组件可用于直接请求,必须向应用的路由器公开 RCL 的程序集。打开服务器项目的 Program.cs 文件,并添加以下代码:

app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode()
    .AddInteractiveWebAssemblyRenderMode()
    .AddAdditionalAssemblies(typeof(MyComponents.Client._Imports).Assembly)
    //添加以下代码,引入RCL的程序集
    .AddAdditionalAssemblies(typeof(RazorClassLibrary1._Imports).Assembly); 

静态资源

RCL 的静态资产可用于任何使用该库的应用,将静态资产放在 RCL 的 wwwroot 文件夹中,并在应用中使用以下路径引用静态资产:

_content/{PACKAGE ID}/{PATH AND FILE NAME}
<img src="_content/RazorClassLibrary1/img/test.png" />
  • {PACKAGE ID} :库的包 ID ,如果没有指定则包 ID 默认为项目的程序集名称
  • {PATH AND FILE NAME} : wwwroot 下的路径和文件名

此路径格式还用于应用中由添加到 RCL 的 NuGet 包提供的静态资产。

表单

组件呈现的是标准的 HTML 元素, 实际上可以使用标准的 HTML 表单元素。但还是建议使用各种 Blazor 输入控件, 因为它们带有额外的功能。关于组件更详细的内容,请参考官方文档ASP.NET Core Blazor表单概述

EditForm

Blazor 中提供了一个可用的输入组件的标准集合,所有组件都派自基类 InputBase<T> :
image

标准输入组件

下面是一个标准输入组件使用示例,都比较简单就不再单独介绍:

@page "/demo"
@rendermode InteractiveAuto

<h3>Demo</h3>
<EditForm Model="FormData"> 
    <label>输入复选框 Boolean:</label> 
    <InputCheckbox @bind-Value=FormData.Boolean /> <br />

    <label>输入日期 DateTime:</label> 
    <InputDate @bind-Value=FormData.DateTime ParsingErrorMessage="必须是日期" /> <br />

    <label>输入数:</label>
    <label>输入整数 Integer:</label><br />
    <InputNumber @bind-Value=FormData.Integer ParsingErrorMessage="必须是整数值" /> <br />
    <label>输入十进制 Decimal:</label> <br />    
    <InputNumber @bind-Value=FormData.Decimal ParsingErrorMessage="必须是十进制值" /> <br />

    <label>输入选择 Select:</label>
    <InputSelect @bind-Value=FormData.Select>
        @foreach (var item in Enum.GetValues(typeof(State)))
        {
            <option value=@item>@item.ToString()</option>
        }
    </InputSelect><br />

    <label>输入单选 Radio:</label> <br />
    <InputRadioGroup @bind-Value=FormData.Radio>
        @foreach (var item in Enum.GetValues(typeof(State)))
        {
            <InputRadio Value=@item />
            @item.ToString()
            <br />
        }
    </InputRadioGroup>

    <label>输入文本 String:</label> <br />
    <InputText @bind-Value=FormData.String /> <br />

    <label>输入多行文本 String:</label> <br />
    <InputTextArea @bind-Value=FormData.MultiLineStr /> <br />       
</EditForm>
@code
{
    //指示应从表单数据中提供关联属性的值
    [SupplyParameterFromForm]
    private TestModel FormData  { get; set; } = new TestModel();

    class TestModel
    {
        public bool Boolean { get; set; }
        public DateTime? DateTime { get; set; }
        public int Integer { get; set; }
        public decimal Decimal { get; set; }
        public string String { get; set; }
        public string MultiLineStr { get; set; }
        public State Select { get; set; } = State.Active;
        public State Radio { get; set; }= State.Active;
    }

    public enum State
    {
        Pending,
        Active,
        Suspended
    }
}

运行效果如下:
image

验证

表单验证需要注意两点:

  • 必须在EditForm内添加一个验证组件 DataAnnotationsValidatorEditForm
  • 可以通过两种方式向用户显示验证错误消息,两者互不冲突可以同时使用:
    • ValidationSummary:显示表单中所有错误的完整列表
    • ValidationMessage:显示特定输入的错误消息

下面是一个简单的示例,注意要使用OnValidSubmit事件,否则验证不会生效:

@page "/demo"
@rendermode InteractiveAuto
@using System.ComponentModel.DataAnnotations

<h3>Demo</h3>
<EditForm Model=@Person FormName="personForm" OnValidSubmit=@SubmitForm>
    @* 必须指定一个验证机制 *@
    <DataAnnotationsValidator />
    @* 显示表单中所有错误的完整列表 *@
    <ValidationSummary />

    <div>
        <label for="Name">Name</label>
        <InputText @bind-Value=Person.Name/>
        @* 显示单个字段的错误消息 *@         
        <ValidationMessage For="() => Person.Name" />
    </div>

    <div>
        <label for="Age">Age</label>
        <InputNumber @bind-Value=Person.Age/>
        @* 引用"" 和 Razor 表达式@(...) 两种形式都是等效的
        1.引用的表格更易于阅读,
        2.Razor 表达式可以清楚地知道定义的是表达式而不是字符串 *@
        <ValidationMessage For=@(() => Person.Age) />
    </div>
    <input type="submit" value="保存" />
</EditForm>
@code {
    //验证需要引入命名空间 System.ComponentModel.DataAnnotations
    public class PersonModel
    {
        //指定属性不能为 null 或为空
        [Required(ErrorMessage = "姓名不能为空。")]
        public string Name { get; set; }

        //指定属性的有效值范围(从 18 到 80),还提供适合向用户显示的错误消息
        [Range(18, 80, ErrorMessage = "年龄必须在18岁到80岁之间。")]
        public int Age { get; set; }
    }

    [SupplyParameterFromForm]
    private PersonModel Person { get; set; } = new PersonModel();
}

运行效果如下:
image

HTML 表单

使用常规 HTML <form> 标签创建表单,并指定用于处理提交的表单请求的 @onsubmit 处理程序:

@* 必须提供表名 *@
<form @formname="htmlForm" @onsubmit="SubmitForm">
    @* 为了安全起见,必须提供 AntiforgeryToken *@
    <AntiforgeryToken />    
    <div>
        <label for="Name">Name</label>
        <InputText @bind-Value=Person.Name />
    </div>
    <div>
        <label for="Age">Age</label>
        <InputNumber @bind-Value=Person.Age />
    </div>
    <input type="submit" value="保存" />
</form>

在表单中包含 AntiforgeryToken 组件以包含防伪支持,详细内容可参考官方文档 防伪支持

对于基于 EditForm 的窗体,默认情况下会自动添加 AntiforgeryToken 组件和 [RequireAntiforgeryToken] 属性以提供防伪保护。

From:https://www.cnblogs.com/timefiles/p/18367761
本文地址: http://www.shuzixingkong.net/article/1240
0评论
提交 加载更多评论
其他文章 基于surging的产品项目-木舟开源了!
一 、 概述 因为前段时间电脑坏了,导致代码遗失,踌躇满志马上上线的平台产品付之东流,现在熬夜在写代码希望能尽快推出企业正常使用的平台产品,而这次把代码开源,一是让大家对surging 使用有个深入的了解,二也是开源社区起到监督推动作用,底层的代码基本上已经完成,比如脚本解析,规则引擎,协议组件的热
基于surging的产品项目-木舟开源了! 基于surging的产品项目-木舟开源了! 基于surging的产品项目-木舟开源了!
SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用
SimpleRAG介绍 SimpleRAG是基于WPF与Semantic Kernel实现的一个简单的RAG应用,可用于学习与理解如何使用Semantic Kernel构建RAG应用。 GitHub地址:https://github.com/Ming-jiayou/SimpleRAG 主要功能 AI
SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用 SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用 SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用
Blazor开发框架Known-V2.0.8
V2.0.8 Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行。目前已有部分客户在使用,最近客户的项目和产品,有的在Docker中运行,有的在重新升级改造中使用达梦数据库。为快速响应客户的需求,本次版本修复了一些BUG、增强了框架内置功能和无代码设置功能
Blazor开发框架Known-V2.0.8 Blazor开发框架Known-V2.0.8 Blazor开发框架Known-V2.0.8
Docker不同宿主机网络打通
本方式使用docker Swarm集群的方式创建overlay 网络进行打通 背景 因java微服务使用nacos做配置中心,为了解决Nacos服务注册使用Docker容器内网ip问题,使用此方案 前置条件 1、宿主机之间需要开通端口 管理端口: 2377/tcp: 用于管理 Swarm 模式集群。
《花100块做个摸鱼小网站! 》第三篇—热搜表结构设计和热搜数据存储
⭐️基础链接导航⭐️ ☁️ 阿里云活动地址 &#128031; 上班摸鱼小网站地址 &#128187; 源码库地址 一、前言 大家好呀,我是summo,第一篇已经教会大家怎么去阿里云买服务器,以及怎么搭建JDK、Redis、MySQL这些环境。第二篇我们把后端的应用搭建好了,并且完成了第一个爬虫(抖
《花100块做个摸鱼小网站! 》第三篇—热搜表结构设计和热搜数据存储 《花100块做个摸鱼小网站! 》第三篇—热搜表结构设计和热搜数据存储 《花100块做个摸鱼小网站! 》第三篇—热搜表结构设计和热搜数据存储
Elsa V3学习之Flowchart详解(上)
前面我们通过界面学习了Elsa的一些基本使用,若是有实操的小伙伴们,应该可以发现,我们工作流定义中的root,既我们的工作流画布其实也是一个activity,就是Flowchart。那么本文将来解读以下flowchart的执行逻辑。 Flowchart源码 为了方便大家,这里先直接把flowchar
Elsa V3学习之Flowchart详解(上) Elsa V3学习之Flowchart详解(上)
Python 加载 TensorFlow 模型
TensorFlow支持多种模型格式,但最常见的两种是SavedModel和HDF5(对于Keras模型),本文简要介绍了TensorFlow中最常见的两种是SavedModel和HDF5的模型,并给出了详细的代码示例。
面试场景题:一次关于线程池使用场景的讨论。
你好呀,我是歪歪。 来一起看看一个关于线程池使用场景上的问题,就当是个场景面试题了。 问题是这样的: 字有点多,我直接给你上个图你就懂了: 前端发起一个生成报表页面的请求,这个页面上的数据由后端多个接口返回,另外由于微服务化了,所以数据散落在每个微服务中,因此需要调用多个下游接口拿到数据进行整合。
面试场景题:一次关于线程池使用场景的讨论。 面试场景题:一次关于线程池使用场景的讨论。 面试场景题:一次关于线程池使用场景的讨论。