Blazor学习之旅(2)第一个Blazor应用

3117af21b2a5d41648f6f0302ba5bc06.jpeg

【Blazor】| 总结/Edison Zhou


大家好,我是Edison。

最近在学习Blazor做全栈开发,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。

本篇我们来构建第一个Blazor Web应用,这里我们选择Blazor Server类型,后面我们再学习Blazor WebAssembly类型。

话外音:有人问我西门子在用Blazor吗?是的,西门子德国的两家数字化工厂都有在用Blazor开发Web应用,特别用到了MudBlazor这个UI组件库,值得关注!而作为西门子在中国的首家数字化工厂,我们自然也要用Blazor开发新的Web应用系统啦!

创建新的Blazor应用

在VS中,添加一个Blazor Server应用。

b55448d1019b2a3144d9fe4dc3340450.png

在“框架”组合框中选择“.NET 6.0(长期支持)”。保持其他设置不变,然后选择“创建”即可。

Blazor应用的结构

一个默认的Blazor应用的项目结构如下图所示:

b7b6133c0407d5e1860edb6a5c6dc859.png

其中:

(1)Data文件夹主要存放Model和Service。

(2)Pages文件夹主要存放基于Razor的页面和组件。其中,.cshtml是页面,.razor的则一般是组件,可复用。

(3)Shared文件夹主要存放页面模板、导航模板等。

其他:

(1)Imports.razor用于声明全局应用的命名空间。

(2)App.razor用于声明默认的Router。

Blazor应用初体验

这里,我们暂时啥也不改,Run起来看看效果:

(1)首先是一段文字介绍:

2a8c589f0b935f65487f5cf30120aa3d.png

(2)点击Counter菜单,进入计数器页面:

5b301ae0d99c57092597b19fb145bcb3.png

(3)点击Fetch data菜单,进入天气预报示例数据表格:

1acbd11e0fadf2f68538f387ce4da916.png

计数器示例

在Pages/Counter.razor我们可以看到这个Counter组件的实现:

@page "/counter"<h1>Counter</h1><p role="status">Current count: @currentCount</p><button class="btn btn-primary" @onclick="IncrementCount">Click me</button>@code {private int currentCount = 0;private void IncrementCount(){currentCount++;}
}

我们来看看这个组件的代码:

(1)@page指令说明了浏览器可以通过/counter请求来访问该组件;

(2)@code指令说明了C#代码区域,声明了一个InCrementCount方法用于点击次数的自增。

(3)button标签中通过@onclick绑定了点击事件InCrementCOunt,会触发currentCount的自增。

使用组件

这里我们尝试在Index.razor文件中添加一个刚刚的Counter组件:

@page "/"<h1>Hello, world!</h1>Welcome to your new app.<SurveyPrompt Title="How is Blazor working for you?" /><Counter />

这时,我们重新启动应用就可以看到Counter组件显示在主页上面了:

ab1529f5db4c0830c803e1ca05d99484.png

此时,假设我们每个Counter组件的调用方希望的递增值是不固定的,不一定都是1。换句话说,我们希望支持调用方传递它需要递增的值,比如10。

这里,我们稍微改动一下Counter组件的实现:

@page "/counter"<h1>Counter</h1><p role="status">Current count: @currentCount</p><button class="btn btn-primary" @onclick="IncrementCount">Click me</button>@code {private int currentCount = 0;[Parameter]public int IncrementAmount { get; set; } = 1;private void IncrementCount(){currentCount += IncrementAmount;}
}

这里的改动为:

  • 使用 [Parameter] 特性为 IncrementAmount 添加公共属性。

  • 更改 IncrementCount 方法以在 currentCount 的值递增时使用 IncrementAmount。

当我们再次运行,在主页点击后,就会以10递增。

8c2eac0cf225cc3d53387d7c73700c8e.png

而在Counter组件页,它还是以1递增。

小结

本篇,我们创建第一个Blazor应用。

下一篇,我们来写一个Todo应用,把分层结构和EF Core串起来!

参考资料

Microsoft Docs,《使用Blazor生成Web应用》

bee994c38d7a80f961ca0cd1dee2b0ac.gif

年终总结:Edison的2021年终总结

数字化转型:我在传统企业做数字化转型

C#刷题:C#刷剑指Offer算法题系列文章目录

.NET面试:.NET开发面试知识体系

.NET大会:2020年中国.NET开发者大会PDF资料

996bfc50b2af4d90bf01a920f998c52f.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《深入理解Hadoop(原书第2版)》——2.6本章小结

本节书摘来自华章计算机《深入理解Hadoop&#xff08;原书第2版&#xff09;》一书中的第2章&#xff0c;第2.6节&#xff0c;作者 [美]萨米尔瓦德卡&#xff08;Sameer Wadkar&#xff09;&#xff0c;马杜西德林埃&#xff08;Madhu Siddalingaiah&#xff09;&#xff0c;杰…

HTTP与服务器的四种交互方式

Http定义了与服务器交互的不同方法&#xff0c;最基本的方法有4种&#xff0c;分别是GET&#xff0c;POST&#xff0c;PUT&#xff0c;DELETE。URL全称是资源描述符&#xff0c;我们可以这样认为&#xff1a;一个URL地址&#xff0c;它用于描述一个网络上的资源&#xff0c;而H…

ubuntu 以太网已连接但是无法联网_工业以太网有多“牛X”?两个案例告诉你

现代生活中&#xff0c;工业以太网发挥的作用愈来愈重要。为增进大家对工业以太网的认识&#xff0c;本文将基于3方面介绍工业以太网&#xff1a;何为工业以太网物理层&#xff1f;工业以太网具有哪些优势&#xff1f;工业以太网两大方案介绍。如果你对工业以太网具有兴趣&…

高可用架构可行性方案

一、动静分离 把静态的&#xff0c;耗费大量带宽资源、请求资源的数据独立出来&#xff0c;缓存到cdn里去&#xff0c;包括产品详情页&#xff0c;图片、视频、js、css通通打包放到cdn里去&#xff0c;封住一部分流量&#xff0c;用cdn去承担。 二、热数据预热缓存 将一些热点数…

SublimeText 自带格式化代码功能

其实sublime自身就有格式化命令&#xff0c;就不再安装插件&#xff0c;位置在[Preferences]->[Key Bindings]->[User]中, 中文版的位置在 [首选项]->[按键绑定-用户]&#xff0c;弹出的页面中 &#xff0c;添加如下代码&#xff0c;为其设置快捷键&#xff1a;Ctr…

http服务详解(1)——一次完整的http服务请求处理过程

前言&#xff1a;要熟练掌握一个服务&#xff0c;首先需要非常了解这个服务的工作过程&#xff0c;这篇就详细解释了http服务的请求处理过程。 一次完整的http请求处理过程 &#xff08;1&#xff09;流程图 &#xff08;2&#xff09;过程详解 0、DNS域名解析&#xff1a;递归…

线程管理(九)使用本地线程变量

声明&#xff1a;本文是《 Java 7 Concurrency Cookbook 》的第一章&#xff0c; 作者&#xff1a; Javier Fernndez Gonzlez 译者&#xff1a;郑玉婷 校对&#xff1a;方腾飞 使用本地线程变量 并发应用的一个关键地方就是共享数据。这个对那些扩展Thread类或者实现Runnable接…

5训练需要更改参数吗_糖尿病病人需要多喝水吗?多喝水的5大好处,了解一下...

糖尿病是典型的慢性疾病&#xff0c;需要在生活中多加讲究&#xff0c;从各方面进行预防&#xff0c;其中喝水也是非常重要的一项调控方法。这就与糖尿病影响到患者的代谢功能有一定的关系&#xff0c;如果能够保持良好的饮水习惯&#xff0c;就可以有效解决糖尿病带来的影响。…

wordpress搭建博客 主题推荐 2019

一、generatepress2.14 主页&#xff1a; 详情页&#xff1a; 二、 Astra 主页&#xff1a; 详情页&#xff1a; 三、Bstone 主页&#xff1a; 详情页&#xff1a; 四、Hestia 主页&#xff1a; 详情页&#xff1a; 五、Rife free 主页&#xff1a; 详情页&#xff1a;

Blazor学习之旅(1)初步了解Blazor

【Blazor】| 总结/Edison Zhou九月以来在学习Blazor做全栈开发&#xff0c;因此根据老习惯&#xff0c;我会将我的学习过程记录下来&#xff0c;一来体系化整理&#xff0c;二来作为笔记供将来翻看。作为第一篇&#xff0c;我们先来了解一下这个Blazor到底是个什么鬼。什么是Bl…

英国如何推动分享经济的发展?

——基于英国“分享经济全球中心”战略的深度分析 蔡雄山 腾讯研究院法律研究中心首席研究员 徐 俊 腾讯研究院助理研究员 “分享经济具有巨大的经济潜力&#xff0c;我希望确保英国处于分享经济的前沿与中心&#xff0c;并且成为能够与旧金山相媲美的高科技初创企业的发源地…

C#合并文件夹图片列表 自定义排版顺序

本次程序编写主要为了将pdf word等文档转换为图片后设置不同的打印排版 前提 目标文件夹中的图片高宽都是一致的 /// <summary>/// 合并图片/// </summary>/// <param name"savedictory">文件保存目录</param>/// <param name"singl…

硬盘基本知识(一)

总体来说&#xff0c;硬盘结构包括&#xff1a;盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器、接口、缓存等几个部份。所有的盘片&#xff08;一般硬盘里有多个盘片&#xff0c;盘片之间平行&#xff09;都固定在一个主轴上。在每个盘片的存储面上都有一个磁头&…

MySQL - 存储过程

一、概述 存储过程可以理解为一段 SQL 语句的集合&#xff08;相当于 PHP 中的一个函数方法&#xff0c;去实现业务逻辑&#xff09;&#xff0c;它们被事先编译好并且存储在数据库中。 调用存储过程与直接执行 SQL 语句的效果是相同的&#xff0c;但是存储过程的一个好处是处理…

白话聊应用架构

产业互联网时代&#xff0c;数字化转型&#xff08;数字化演化历史&#xff09;已成为一种趋势&#xff0c;各行各业都投入到数字化转型的浪潮中来。节后有个客户项目参与者问我架构方面的事情&#xff0c;我想来想去对于非IT人来说&#xff0c;可能应用架构是最容易理解&#…

python大数_python处理大数字的方法

本文实例讲述了python处理大数字的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;def getFactorial(n):"""returns the factorial of n"""if n 0:return 1else:k n * getFactorial(n-1)return kfor k in range(1, 70):print "…

数据库分库分表、读写分离的原理和实现,以及使用场景

2019独角兽企业重金招聘Python工程师标准>>> 为什么要分库分表和读写分离&#xff1f; 类似淘宝网这样的网站&#xff0c;海量数据的存储和访问成为了系统设计的瓶颈问题&#xff0c;日益增长的业务数据&#xff0c;无疑对数据库造成了相当大的负载&#xff0c;同时…

谈谈一些有趣的CSS题目(十六)-- 奇妙的 background-clip: text

开本系列&#xff0c;谈谈一些有趣的 CSS 题目&#xff0c;题目类型天马行空&#xff0c;想到什么说什么&#xff0c;不仅为了拓宽一下解决问题的思路&#xff0c;更涉及一些容易忽视的 CSS 细节。 解题不考虑兼容性&#xff0c;题目天马行空&#xff0c;想到什么说什么&#x…

第五周软件工程作业-每周例行报告

一、PSP T名称C内容ST开始时间ED结束时间中断时间/min实际时间/minScrum会议第一次Scrum会议10月13日11:3010月13日12:10040第二次Scrum会议10月14日15:3010月14日15:55025第三次Scrum会议10月15日13:3010月15日14:05035第四次Scrum会议10月16日11:3010月16日13:00090第五次Scr…

MySQL - 触发器

一、概述 Mysql 允许通过触发器、存储过程、函数的形式来存储代码。 触发器可以让你在执行 Insert、Update、Delete的时候&#xff0c;执行一些特定的操作。可以在Mysql中指定是在Sql语句执行之前触发还是执行后触发。 二、使用触发器需要注意的点 对每一个表的每一个事件&a…