一起学Blazor WebAssembly 开发(3)
接着上篇,本篇开始讲下实现登录窗口,先看下大概的效果图:
打开的效果,没有美工美化
点登录校验得到不能为空
我在做blazor时用到了一个ui框架,这个框架名叫Ant Design blazor(https://gitee.com/ant-design-blazor/ant-design-blazor),安装步骤如下:
1、打开项目里的Nuget,查找 AntDesign ,找到后安装
2、在项目中(Program.cs)注册:
services.AddAntDesign();
3、在 wwwroot/index.html(WebAssembly) 或 Pages/_Host.razor(Server) 中引入静态文件:
<link href="_content/AntDesign/css/ant-design-blazor.css" rel="stylesheet" />
<script src="_content/AntDesign/js/ant-design-blazor.js"></script>
4、在 _Imports.razor 中加入命名空间
@using AntDesign
5、为了动态地显示弹出组件,需要在 App.razor 中添加一个 <AntContainer /> 组件。
<Router AppAssembly="@typeof(MainLayout).Assembly">
<Found Context="routeData">
<RouteView RouteData="routeData" DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<Result Status="" />
</LayoutView>
</NotFound>
</Router> <AntContainer /> <-- 在这里添加
以上安装完成AntDesign Blazor了就。然后就可以使用他的组件了。
先看下Login.Razor的代码
@page "/login"
@layout LoginLayout
@using System.ComponentModel.DataAnnotations;
@using System.Text.Json;
@inject TokenHttpClient TokenHttp <Form Model="@model"
LabelCol="new ColLayoutParam { Span = 8 }"
WrapperCol="new ColLayoutParam { Span = 16 }"
OnFinish="OnFinish"
OnFinishFailed="OnFinishFailed">
<FormItem Label="用户名">
<Input @bind-Value="@context.Username" />
</FormItem>
<FormItem Label="密 码">
<InputPassword @bind-Value="@context.Password" />
</FormItem>
<FormItem WrapperCol="new ColLayoutParam{ Offset = 8, Span = 16 }">
<Checkbox @bind-Value="context.RememberMe">Remember me</Checkbox>
</FormItem>
<FormItem WrapperCol="new ColLayoutParam{ Offset = 8, Span = 16 }">
<Button Type="@ButtonType.Primary" HtmlType="submit">
登录
</Button>
</FormItem>
</Form>
@code
{
public class UserLoginDto
{
[Required(ErrorMessage ="用户名不能为空")]
public string Username { get; set; }
[Required(ErrorMessage = "密码不能为空")]
public string Password { get; set; }
public bool RememberMe { get; set; } = false;
} private UserLoginDto model = new UserLoginDto(); private void OnFinish(EditContext editContext)
{
HttpResponseMessage message = TokenHttp.PostAsJsonAsync(TokenHttpClient.RequesUrl + "", model).Result;
//Todo
} private void OnFinishFailed(EditContext editContext)
{
//Todo
}
}
代码我们主要关注几个地方:
1、Login.Razor用了自己独立的Layout,叫LoginLayout,它的代码如下:
@inherits LayoutComponentBase
<Layout>
<Content Style="overflow: auto; height: 100vh; width:100vw; position: fixed; left: 0; background:#808080 ">
<div style="margin:40vh auto auto 40vw;width:20vw;">
@Body
</div>
</Content>
</Layout>
LoginLayout实现了一个用css控制登录框居中的效果。
2、TokenHttpClient 类,本来用HttpClient也是能实现与后台交互的,但是由于我在项目用到了一个token需要在一定条件下刷新的功能,就做了个继承自HttpClient的类TokenHttpClient,如果没有这种特殊需求,这块可以不用,可以直接用HttpClient。用了这个类那么在Program.cs里就要添加
builder.Services.AddTransient<TokenHttpClient>();
3、重点请看UserLoginDto,这是数据传输对象,这里用到的数据校验方式是否似曾相识,没错,后台开发时经常用到这种验证的方法。这里在blazor里可以直接这样用。效果就是上边截图显示的那种效果。是不是很优雅。比js那种乱七八糟的舒服多了吧。
4、往后台交互提交数据是在OnFinish里,数据通过HttpClient直接可以往后台提交。(不是Ajax哦)
以上就是本篇实现的东西,由于后台采用的Abp vnext 框架,目前登录后台功能还没实现好,所以这块还没完成,等完成了发布新的给大家看。
一起学Blazor WebAssembly 开发(3)的更多相关文章
- 一起学Blazor WebAssembly 开发(1)
最近blazor的WebAssembly 正式版出来了,正好手头有一个项目采用的前后端分离模式做的,后端用的abp vnext(.net core 的一个很著名的框架)框架开发的,其实前端之前考虑的使 ...
- 一起学Blazor WebAssembly 开发(2)
上篇文章讲了Blazor的两种模式的区别及各自的使用场景,本篇就开始学习WebAssembly模式,本篇主要学习的是创建项目及认识项目结构: 创建项目 选择Blazor应用 选择WebAssembly ...
- 从零开始一起学Blazor WebAssembly 开发(4)
登录模块基本完成了,登录主要用了以下几个点: 1.后端采用的Abp Vnext 框架,这个框架自带的IdentityServer4用户角色权限控制,这个框架登录研究了好一阵子,有几个坑这里说下: 1) ...
- Blazor Webassembly多标签页开发
最近准备用Blazor Webassembly做后台开发要用到多标签页,找了半天发现绝大多数都是Blazor Server的多标签没有Webassembly.没办法只能自己想办法造轮子了. 查了许多资 ...
- 浏览器中的 .Net Core —— Blazor WebAssembly 初体验
前言 在两年多以前就听闻 Blazor 框架,是 .Net 之父的业余实验性项目,其目的是探索 .Net 与 WebAssembly 的兼容性和应用前景.现在这个项目已经正式成为 Asp.Net Co ...
- ASP.NET Core Blazor 初探之 Blazor WebAssembly
最近Blazor热度很高,传说马上就要发布正式版了,做为微软脑残粉,赶紧也来凑个热闹,学习一下. Blazor Blazor是微软在ASP.NET Core框架下开发的一种全新的Web开发框架.Bla ...
- 通过 Serverless 加速 Blazor WebAssembly
Blazor ❤ Serverless 我正在开发 Ant Design 的 Blazor 版本,预览页面部署在 Github Pages 上,但是加载速度很不理想,往往需要 1 分钟多钟才完成. 项 ...
- Blazor WebAssembly 3.2.0 Preview 4 如期发布
ASP.NET团队如期3.16在官方博客发布了 Blazor WebAssembly 3.2.0 Preview 4:https://devblogs.microsoft.com/aspnet/bla ...
- Blazor WebAssembly 3.2.0 已在塔架就位 将发射新一代前端SPA框架
最美人间四月天,春光不负赶路人.在充满无限希望的明媚春天里,一路风雨兼程的.NET团队正奋力实现新的突破. 根据计划,新一代基于WebAssembly 技术研发的前端SPA框架Blazor 将于5月1 ...
随机推荐
- linux网络编程-socket(1)
上面是对应的IpV4的地址结构: sin_len整个结构的大小 sin_family协议族,对应Tcp固定为AF_INET,除了tcp协议外还支持unix域协议等 sin_port socket通信的 ...
- xutils工具上传日志文件
首先下载xutils java包: 添加到项目的工程中: 第二在新建一个类继承application package logback.ecmapplication.cetcs.com.myapplic ...
- ant+jmeter+jenkins接口自动化测试一
[Jmeter篇]jmeter+Ant+Jenkins接口自动化测试集成(一) 橙子探索测试发表于橙子探索测试订阅 90 一.简介 1.什么是ant? ant是构建工具,把代码从某个地方拿来,编译,再 ...
- 一种基于LQR使输出更加稳定的算法(超级实用)
已知: 令: 则: 以上三式成立 具体步骤: 状态量最后一行加入“上一时刻的控制量”: A,B根据上述方法变形: Q,R增加维度(控制量一般都为一个,此时R维度不变): 最关键的是——输出量已经变为“ ...
- Redis系列(十二):数据结构SortedSet跳跃表中基本操作命令和源码解析
1.SkipList Redis的sortedSet数据结构是有序不重复的(索引为唯一的,数据(score)却可以重复), 跳表是redis的一个核心组件,也同时被广泛地运用到了各种缓存地实现当中,它 ...
- Javascript 中 数组遍历 forin和forof 的区别
定义一个数组 let array = [1, 2, 3, 4]; for (let a in array){ console.log("遍历a的值 "+a+"”,数组中的 ...
- Mybatis架构相关的知识
如上所示,这是一个简单的Mybaits执行流程. 我们其实可以看到,一直到第三步(Sqlsession)那么一步,这都是我们的程序里需要创建的.而之后的步骤才是底层完成的任务. 这里就有了一个引申的概 ...
- web网页多语言的实现方案_前端实现多语言切换
实现的效果 需要在web中实现多语言的切换,当用户语言切换完成后下次重新打开网页,也是上次设置的语言进行显示. 资源网站搜索大全https://55wd.com 实现步骤 1.在用户点击切换语言后,把 ...
- Ocelot网关+IdentityServer4实现API权限认证
Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly ...
- NOI Online #3 提高组 T1水壶 题解
题目描述 有 n 个容量无穷大的水壶,它们从 1∼n 编号,初始时 i 号水壶中装有 Ai 单位的水. 你可以进行不超过 k 次操作,每次操作需要选择一个满足 1≤x≤n−1 的编号 x,然后把 x ...