首页 > 其他分享 >.NET8 Blazor 从入门到精通:(三)类库和表单

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

时间:2024-08-19 17:27:27浏览次数:7  
标签:类库 set get 表单 RCL NET8 组件 Blazor public

目录

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

    <div class="form-group">
        <label for="Age">Age</label>
        <InputNumber @bind-Value=Person.Age/>
        @* 引用"" 和 Razor 表达式@(...) 两种形式都是等效的
        1.引用的表格更易于阅读,
        2.Razor 表达式可以清楚地知道定义的是表达式而不是字符串 *@
        <ValidationMessage For=@(() => Person.Age) />
    </div>
    <input type="submit" class="btn btn-primary" 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 class="form-group">
        <label for="Name">Name</label>
        <InputText @bind-Value=Person.Name class="form-control" />
    </div>
    <div class="form-group">
        <label for="Age">Age</label>
        <InputNumber @bind-Value=Person.Age class="form-control" />
    </div>
    <input type="submit" class="btn btn-primary" value="保存" />
</form>

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

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

标签:类库,set,get,表单,RCL,NET8,组件,Blazor,public
From: https://www.cnblogs.com/timefiles/p/18367761

相关文章

  • Blazor开发框架Known-V2.0.8
    V2.0.8Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行。目前已有部分客户在使用,最近客户的项目和产品,有的在Docker中运行,有的在重新升级改造中使用达梦数据库。为快速响应客户的需求,本次版本修复了一些BUG、增强了框架内置功能和无代码设置功能、添......
  • 界面控件DevExpress即将推出全新AI功能,WinForms & Blazor组件可用!
    DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress近期重要版本v24.1已正式发布,该版本拥有众多新产品和数十个具有高影响力......
  • .NET8 Blazor 从入门到精通:(二)组件
    目录Blazor组件基础路由导航参数组件参数路由参数生命周期事件状态更改组件事件Blazor组件基础新建一个项目命名为MyComponents,项目模板的交互类型选Auto,其它保持默认选项:客户端组件(Auto/WebAssembly):最终解决方案里面会有两个项目:服务器端项目、客户端项目,组件按......
  • 增量生成器简化BlazorServer兼容BlazorAuto模式
    本文简略介绍一下如何使用增量生成器(IncrementalGenerator)简化BlazorServer兼容Auto模式比如现在有一个BlazorServer项目的Razor页面//UserIndex.razor@code{[Inject,NotNull]IUserService?Service{get;set;}}如果IUserService的实现不支持运行在WebAssemb......
  • CAD二次开发入门:WPF类库
     参考学习视频:https://www.bilibili.com/video/BV16Y411v7kr/?spm_id_from=333.337.search-card.all.click&vd_source=fbb64ea20b269b753497bf6c2499fc29 第一步:创建WPF类库,并写CAD调用方法  修改输出类型为:类库 添加CAD开发需要的类库 main页面添加以下内容:......
  • 界面控件DevExpress即将推出全新AI功能,WinForms & Blazor组件可用!
    DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress近期重要版本v24.1已正式发布,该版本拥有众多新产品和数十个具有高影响力的功......
  • .NET8 缓存的使用
    .NET8下面的几种缓存的使用。(1)ICache.cs   usingSystem;usingSystem.Threading.Tasks;publicinterfaceICache{#region设置缓存///<summary>///设置缓存///</summary>///<paramname="key"&......
  • Python 开发环境的准备以及一些常用类库模块的安装
    在学习和开发Python的时候,第一步的工作就是先准备好开发环境,包括相关常用的插件,以及一些辅助工具,这样我们在后续的开发工作中,才能做到事半功倍。下面介绍一些Python开发环境的准备以及一些常用类库模块的安装和使用的经验总结,供大家参考了解。1、开发VScode的安装及相关准备在......
  • Blazor开发框架Known-V2.0.7
    V2.0.7Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行。官网:http://known.pumantech.comGitee:https://gitee.com/known/KnownGithub:https://github.com/known/Known概述基于C#和Blazor的快速开发框架,开箱即用,跨平台。模块化,单页应用,混合......
  • MAUI Blazor学习17-NavigationLock阻止页面回退
    MAUIBlazor学习17-NavigationLock阻止页面回退 MAUIBlazor系列目录MAUIBlazor学习1-移动客户端Shell布局-SunnyTrudeau-博客园(cnblogs.com)MAUIBlazor学习2-创建移动客户端Razor页面-SunnyTrudeau-博客园(cnblogs.com)MAUIBlazor学习3-绘制ECharts图表-S......