.NET Core 又一杀器! Web Blazor框架横空出世!

640?wx_fmt=png

  多年来,Javascript(及其子框架)已在浏览器中运行DOM(文档对象模型),并且掌握了脚本知识才能真正操作客户端UI。大约2年前,所有这些都随着Web Assembly的引入而发生了变化-Web Assembly允许在客户端解释已编译的语言(相对Web Assembly更多了解请阅读了解wasm的前世今身),并且现在所有浏览器都完全支持它。微软对此的回答是Blazor的创立。允许C#开发人员在.NET(包括UI)中构建其整个堆栈是一个令人兴奋的主张。一段时间以来,Blazor一直处于预览状态,但现在已包含在2019年9月23日的一般发行版以及.NET Core 3.0版的下一版中,当然想要品味Blazor的味道,再怎么说也要用.VisualStudio 2019 且安装.NET Core 3.0 + SDK。微软已经就如何执行此操作编写了一套给力的说明,并且该文档已在Microsoft Docs中呈现。您可以选择退出我的博客选择微软官方,但与其对比,我的还算....其GitHub地址为: https://github.com/AdrienTorris/awesome-blazor 

  创建Blazor项目可以通过dotnetCli命令来创建项目, dotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.1.0-preview1.19508.20 ,我们文章中就直接通过Visual Studio来创建,如下图所示我们选择。

640?wx_fmt=png创建项目成功,我们来分析一下Blazor中的项目初始文件都是些什么?都有啥用?
640?wx_fmt=png

  • 依赖项,属性和wwwroot文件夹与标准ASP.NET Core应用程序中的文件夹相同。 

  • 该网页文件夹包含包括这个应用程序,就像网页MVC应用程序一样。

  • 该共享文件夹包含适用于整个应用程序的布局页。

  • 该_ViewImports.cshtml文件用于导入命名空间为其它* .cshtml文件。 

  • 在Program.cs的文件用于创建ASP.NET核心托管环境。

  • 该Startup.cs文件 不多解释。

  • 在_Imports.razor中我们直接全局引入库

 如果运行示例应用程序,则会得到一个如下所示的页面:
640?wx_fmt=png

随后你会在畅游在官方示例中,无尽遐想,这么给力的框架!我改如何去驾驭它,使用它?好的,我们现在就开始!激动的时刻!

现在我们需要一个razor组件,注意现在是叫做组件,不是通常使用的*.cshtml了,将我已编写好的代码来继续我的演讲,复制下面的代码。

<h3>Todo</h3>
@page "/todo"
@inject TodoItemService todoitemservice
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Description</th>
</tr>
</thead>
<tbody>
@foreach (var todoitem in todos)
{
<tr>
<td>@todoitem.IsDone</td>
<td>@todoitem.Title</td>
</tr>
}
</tbody>
</table>
<input placeholder="Something todo" @bind="newTodo" />
<button @οnclick="AddTodo">Add todo</button>

@code {
private IList<TodoItem> todos = new List<TodoItem>();
private string newTodo;

private void AddTodo()
{
if (!string.IsNullOrWhiteSpace(newTodo))
{
todos.Add(new TodoItem { Title = newTodo,id=Guid.NewGuid().ToString()  });
newTodo = string.Empty;
}
}
}
@functions{
protected override async Task OnInitializedAsync()
{
todos = await todoitemservice.GetTodoItems();
}
}


 让我们看看上面发生了什么?我们从上到下一个一个来说。 @using BlazorDemo.Data; 是我的组件需要使用的实体,如果你仔细阅读上文,您会知道在 _Imports.razor 中如果引用了该实体,那么所有组件将无需多言。所以我在其中添加了该实体。


@using System.Net.Http
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.JSInterop
@using BlazorDemo
@using BlazorDemo.Shared
@using BlazorDemo.Data;


 @page 是一个指令,它告诉ASP.NET这是一个Razor页面并设置默认路由。在我们的例子中,路线是相对路线“ / todo”。此参数接受相对和绝对路径;后者类似于“〜/ Path / To / Page”。您可以@page为多个路由使用多个指令。随后您可以在 NavMenu.razor 中添加该页面的导航。

<li class="nav-item px-3">
<NavLink class="nav-link" href="todo">
<span class="oi oi-list-rich" aria-hidden="true"></span> Todo
</NavLink>
</li>

 该@inject指令告诉Blazor使用依赖注入将一个类注入此页面。在本例中,我们正在注入 TodoItemService ,以便我们可以从之前创建的样本数据中读取。其该服务的定义如下,它简单的离谱。


public class TodoItemService
{
public Task<List<TodoItem>> GetTodoItems()
{
List<TodoItem> list = new List<TodoItem>();
list.Add(new TodoItem() {
IsDone = false, Title = "zaranet",id = Guid.NewGuid().ToString()
});
return Task.FromResult(list);
}
}


由于现在有了读取和查看数据的方法,因此我们需要定义一种可以加载样本数据的方法。为此,我们需要 @functions 指令。

@functions{
protected override async Task OnInitializedAsync()
{
todos = await todoitemservice.GetTodoItems();
}
}

真正的魔术就是 OnInitializedAsync 方法。将页面加载到浏览器时将触发此方法。在我们的实现中,它所做的就是获取JSON示例数据并将其转换为我们新定义的ToDoItem类。现在我们可以运行该应用程序,并查看我们的页面!看起来像这样:

640?wx_fmt=gif

 难以置信!我们有一个工作页面!现在,我们可以扩展此页面,以便我们可以删除,这里就不再提出更新,后期我在详细说明我在Blazor中使用的UI。现在我们在表格中添加一列按钮 用于触发删除的事件,看看我们该如何编写?

640?wx_fmt=gif

<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Description</th>
<th>Work</th>
</tr>
</thead>
<tbody>
@foreach (var todoitem in todos)
{
<tr>
<td>@todoitem.IsDone</td>
<td>@todoitem.Title</td>
<td><button @οnclick="(() => RemoveTodo(todoitem.id))"><i class="oi oi-trash"></i></button></td>
</tr>
}
</tbody>
</table>

640?wx_fmt=gif

 请注意onclick绑定到HTML按钮的事件。此事件绑定到C#方法 RemoveTodo() ,如下所示:

@functions{
private void RemoveTodo(string id)
{
todos.Remove(todos.First(x => x.id == id));
}
}

我们重新试着启动程序~看看会发生什么?是报错?是编译不成功?都有可能会发生?

640?wx_fmt=gif

 Blazor是一个客户端Web框架,使我们能够在客户端单页应用程序中使用C#。它的外观与Razor Pages应用程序非常相似。这个示例项目使我们能够从外部数据源获取ToDo列表项,添加新项,删除项。所有这些功能都发生在客户端。

 此时,我无法控制内心的喜悦 .NET Core这样优秀的框架再配上宇宙第一的Visual Studio简直是传说中的人中吕布马中赤兔!

该示例代码在 https://github.com/zaranetCore/dotNetCoreBlazor 中.


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

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

相关文章

.NET Conf 2019 今天在上海开幕,图片直播地址

.NET Conf 2019 在上海开幕&#xff0c;全程提供图片直播&#xff1a;https://vzan.com/live/tvchat-1099246581下午的分会场内容如下&#xff1a;上午有个直播 &#xff0c;请阅读原文访问https://vzan.com/live/tvchat-1099246581 。

Asp.Net Core 单元测试正确姿势

背景ASP.NET Core 支持依赖关系注入 (DI) 软件设计模式&#xff0c;并且默认注入了很多服务&#xff0c;具体可以参考 官方文档, 相信只要使用过依赖注入框架的同学&#xff0c;都会对此有不同深入的理解&#xff0c;在此无需赘言。然而&#xff0c;在引入 IOC 框架之后&#x…

程序员与「中台」的爱恨交错

大家好&#xff0c;我是Z哥。这篇文章比较长&#xff0c;有5200字&#xff0c;不过希望你能耐心看完&#xff0c;特别是程序员。中台这个词&#xff0c;最近两年特别火&#xff0c;它的爆发源于2015年张勇在阿里发出的内部信中提到的“大中台&#xff0c;小前台”战略。随后吸引…

ML.NET 1.4 发布,跨平台机器学习框架

ML.NET 是一个面向 .NET 开发人员的开源和跨平台机器学习框架&#xff0c;它包括 Model Builder 和 CLI(命令行接口)&#xff0c;让使用自动机器学习(AutoML)构建自定义机器学习模型变得更容易。1.4 版本已经发布了&#xff0c;以下是本次更新的一些亮点&#xff1a;基于 GPU 支…

使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API

1. 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作什么是REST REST一词最早是在2000年&#xff0c;由Roy Fielding在他的博士论文《Architectural Styles and the Design of Network-based Software Architecture》中提出的。他在本文中创造了REST这个术语。这篇论文的地…

Visual Studio Online 的 FAQ:iPad 支持、自托管环境、Azure 账号等

iPad 支持 目前&#xff0c;Web 版 VS Code 只支持基于 Chromium 的浏览器&#xff0c;还不支持 iPad 上的浏览器。但对于 Safari 的支持&#xff0c;是 Visual Studio Online 团队的一件高优先级的任务。更多详情&#xff0c;可以关注&#xff1a; https://github.com/Microso…

2019 .NET China Conf之我逛魔都

趁着参加首届.NET开发者峰会之际&#xff0c;我也是第一次到上海&#xff0c;因此也趁机逛了一下大魔都&#xff0c;和你分享一波我在魔都拍的照片组。酒店所在地&#xff1a;邮电新村地铁站附近为何选择这里&#xff1f;因为离会场酒店6个地铁站&#xff0c;离南京东路和外滩半…

参加首届中国 .NET 开发者峰会有感

参加首届中国 .NET 开发者峰会有感Intro很高兴能够有机会参加首届中国 .NET 开发者峰会&#xff0c;与从全国各地赶来上海参加活动的 .NETer 一起参与这空前的 .NET 的盛会。大会有许多从外地过来参加的开发者们&#xff0c;也有些讲师也是从外地赶过来为我们分享&#xff0c;特…

推荐一款神器-VBAC#代码编辑管理器

网名&#xff1a;liucqa&#xff0c;OFFICE开发领域真大牛&#xff0c;比ExcelHome所有版主和所有出OFFICE开发类书籍的人都要牛的人&#xff0c;出品了它的大作&#xff0c;给大家推荐使用。特色功能&#xff1a;C#&VBA代码格式化/代码收藏/高亮语法详细介绍说明如下&…

【.NET Core 3.0】 46 ║ 授权认证:自定义返回格式

前言哈喽大家好&#xff0c;马上就要年末了&#xff0c;距离新的一年&#xff0c;只有50天了&#xff0c;春节是75天。在这个时节内&#xff0c;天气逐渐变凉&#xff0c;但是大家的心肯定很热吧&#xff0c;因为发生了两件大事&#xff1a;1、双十一买买买&#xff0c;在这个让…

.NET Core 如何生成真正的ICO图标

点击上方蓝字关注“汪宇杰博客”导语前一阵我终于完成了博客系统动态生成favicon的功能。众所周知&#xff0c;favicon肯定有一个ico格式的图标&#xff0c;其余可以用 png manifest 的方式输出。然而这个ICO格式让我小收福报&#xff0c;今天就给大家分享一下解决办法。.NET自…

Visual Studio Online 东半球首秀,亮相 .NET Conf 2019 中国峰会

佷高兴能参加 .NET Conf 并演讲。看到 NET 社区这么活跃&#xff0c;也是非常开心&#xff01;这次我演讲的主题是《Visual Studio Code —— .NET 开发利器》。找找我在哪&#xff1f;更多关于 Visual Studio Online 的四种开发模式&#xff0c;可以阅读这篇文章&#xff1a;最…

.NET Core 3.0 部署在docker上运行

自从.NET Core3.0发布之后&#xff0c;写了几篇关于.NET Core 3.0的文章&#xff0c;有助于你快速入门.NET Core3.0。本篇文章主要讲解如何一步步创建一个mvc项目&#xff0c;然后发布并部署在Docker上运行。需要你本地有docker环境1.创建一个站点创建一个ASP.NET Core Web应用…

2019 .NET China Conf:路一直都在,社区会更好

这个周末&#xff0c;我从成都飞到了上海参加了首届由社区组织而非官方&#xff08;比如Microsoft&#xff09;组织的.NET开发者峰会&#xff08;.NET Conf&#xff09;。为此&#xff0c;我特意请了两天的假&#xff08;周五周六&#xff0c;对&#xff0c;我们是大小周&#…

“开源、共享、创新”, 中国最具前景开发者峰会落幕魔都

点击蓝字关注我们作者&#xff1a;张善友编辑&#xff1a;吴珊珊校正&#xff1a;潘淳、许豪、刘腾飞、朱兴亮、郑和阳、张潇、韩骏问卷制作&#xff1a;杨乐2019年&#xff0c;注定会是 .NET Core 社区发展的关键一年&#xff0c;诸多重大事件在这一年发生&#xff01;正如大家…

GitHub 2019年度报告,用户超4000万

GitHub 发布了 2019 年年度报告《The State of the Octoverse》&#xff0c;下边来看看一些主要数据。全球用户超过 4 千万 目前 GitHub 上有超过 4000 万开发人员&#xff0c;其中有 80&#xff05; 来自美国以外的地区。去年一年里有 1000 万新加入的开发者&#xff0c;2019 …

github 创建文件夹

https://blog.csdn.net/zhaomengszu/article/details/80354929 在我们不适用本地Git的情况下&#xff0c;我们怎么在网页上创建类似下图一样的文件夹呢 四步方法&#xff1a; 第一步&#xff1a;找到新增按钮 第二步&#xff1a;输入文件夹名,你想要用的文件夹名字。 第三步…

ML.NET 终于在Jupyter NoteBook 上跑起来了

对.NETer来说&#xff0c;刚结束的.NET Conf 2019是非常难忘的&#xff0c;毕竟这个个人觉得比微软在中国办的大会更加清真&#xff0c;当然现阶段.NET 已经不单跑在Windows的一项技术了&#xff0c;它可以跑在Linux/macOS/iOS/Android/IoT等&#xff0c;也可以融合当今最热门的…

2019.NET Conf China,.NET之崛起,已势不可挡

本文来自DotNET技术圈作者&#xff1a;邹溪源一、背景当今时代&#xff0c;气象更新&#xff0c;技术飞速发展。当今时代&#xff0c;开发者大概是最优秀的群体。每一位开发者&#xff0c;无不奋勇向前&#xff0c;努力追寻时代的步伐&#xff0c;以大无畏的精神迎接挑战&#…

PowerBI 11月更新 数据PPT是否会引领新一轮革命

PowerBI Desktop 2019年11月更新新鲜出炉了&#xff1a;罗叔作为全球第 80 人观看更新内容者&#xff0c;快速将本月更新全部奉上&#xff0c;供大家参考。 打开预览特性&#xff0c;如下&#xff1a;本次更新出了三大功能&#xff1a; Power Query 支持 AI新的功能区&#xff…