介绍 *请查看我的Youtube视频链接来学习ASP。NET Core Blazor CRUD使用实体框架和Web API。 在本文中,我们将了解如何为ASP创建一个简单的CRUD应用程序。NET Core Blazor使用实体框架和Web API。Blazor是微软引入的一个新框架。我喜欢使用Blazor,因为它使我们的SPA全栈应用程序开发更加简单,而且现在我们只能使用一种语言,比如c#。在Blazor之前,我们一直使用ASP。结合Angular和ReactJs,现在在Blazor的帮助下,我们可以直接用c#代码创建自己的SPA应用程序。如果您使用Blazor开始您的SPA应用程序开发,您肯定会喜欢它,而且使用Blazor工作更加简单和有趣。现在我们唯一的缺点是Blazor是一个新引入的框架,它还处于试验阶段,一旦我们得到了完整的版本,在应用开发中工作会更加有趣。 在本文中,我们将了解如何使用ASP创建CRUD web应用程序。净Blazor核心。 C:(创建):使用ASP将新的学生详细信息插入数据库中。NET Core, Blazor, EF和Web API。R:(读):使用ASP从数据库中选择学生详细信息。NET Core, Blazor, EF和Web API。U:(更新):使用ASP将学生的详细信息更新到数据库。d:(删除):使用ASP从数据库中删除学生的详细信息。NET Core, Blazor, EF和Web API。 我们将使用Web API和EF来执行CRUD操作。Web API有以下四种方法:Get/Post/Put和Delete,其中: Get是请求数据(选择),post是创建数据(插入),put是更新数据(更新),delete是删除数据(删除) 背景 先决条件 请确保已在计算机中安装了所有先决条件。如果没有,那么下载并安装所有,一个一个。注意,由于Blazor是新的框架,我们必须安装Visual Studio 2017(15.7)或以上的预览版。 安装。net Core 2.1 Preview 2 SDK。(你可以在此链接找到所有版本) 安装最新的Visual Studio 2017预览版(15.7)。 安装ASP。NET Core Blazor语言服务用于Blazor扩展。 使用的代码 步骤1 -创建一个数据库和一个表 我们将使用我们的SQL Server数据库为我们的WEB API和EF。首先,我们创建一个名为StudentsDB的数据库和一个名为StudentMaster的表。下面是用于在表中创建数据库表和示例记录插入查询的SQL脚本。在您的本地SQL服务器中运行下面给出的查询,以创建一个数据库和一个表,用于我们的项目。 隐藏,收缩,复制Code

  1. USE MASTER
  2. GO
  3.  
  4. -- 1) Check for the Database Exists .If the database is exist then drop and create new DB
  5. IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'StudentsDB' )
  6. DROP DATABASE StudentsDB
  7. GO
  8.  
  9. CREATE DATABASE StudentsDB
  10. GO
  11.  
  12. USE StudentsDB
  13. GO
  14.  
  15. -- 1) //////////// StudentMasters
  16.  
  17. IF EXISTS ( SELECT [name] FROM sys.tables WHERE [name] = 'StudentMasters' )
  18. DROP TABLE StudentMasters
  19. GO
  20.  
  21. CREATE TABLE [dbo].[StudentMasters](
  22. [StdID] INT IDENTITY PRIMARY KEY,
  23. [StdName] [varchar](100) NOT NULL,
  24. [Email] [varchar](100) NOT NULL,
  25. [Phone] [varchar](20) NOT NULL,
  26. [Address] [varchar](200) NOT NULL
  27. )
  28.  
  29. -- insert sample data to Student Master table
  30. INSERT INTO [StudentMasters] ([StdName],[Email],[Phone],[Address])
  31. VALUES ('Shanu','syedshanumcain@gmail.com','01030550007','Madurai,India')
  32.  
  33. INSERT INTO [StudentMasters] ([StdName],[Email],[Phone],[Address])
  34. VALUES ('Afraz','Afraz@afrazmail.com','01030550006','Madurai,India')
  35.  
  36. INSERT INTO [StudentMasters] ([StdName],[Email],[Phone],[Address])
  37. VALUES ('Afreen','Afreen@afreenmail.com','01030550005','Madurai,India')
  38.  
  39. select * from [StudentMasters]

步骤2 -创建ASP。NET Core Blazor应用 在安装了上面列出的所有先决条件和ASP。NET Core Blazor语言服务,点击开始>>项目在祝辞Visual Studio 2017 >>Visual Studio 2017在你的桌面上。单击New祝辞祝辞项目。选择Web祝辞祝辞ASP。NET Core Angular Web应用。输入项目名称并单击OK。 选择Blazor (ASP。)并单击ok。 在创建ASP。NET Core Blazor应用,等待几秒钟。您将在解决方案资源管理器中看到以下结构。 什么是新的ASP。NET Core Blazor解决方案? 当我们创建新的ASP时。NET Core Blazor应用,我们可以看到在解决方案资源管理器中会自动创建3个项目。 客户端项目 第一个项目作为客户端项目创建,它将作为我们的Solutionname。在这里我们可以看到我们的解决方案名称为“BlazorASPCORE”。由于该项目被命名为client,因此该项目将主要针对所有客户端视图。在这里,我们将添加所有要在浏览器客户端显示的页面视图。 我们可以看到在这里已经添加了一些样例页面,我们还可以看到一个共享文件夹,就像我们的MVC应用程序一样,其中有共享文件夹和主页的布局页面。在这里,在Blazor,我们有主布局,它将工作像主页和导航菜单为左侧菜单显示。 服务器项目 如名称所示,此项目将用作服务器项目。这个项目主要用于创建我们所有的控制器和WEB API控制器来执行所有的业务逻辑和使用WEB API执行CRUD操作。在我们的演示应用程序中,我们将在这个服务器项目中添加一个Web API,并在我们的客户机应用程序中添加所有Web API。这个服务器项目的工作方式类似于从数据库中获取/设置数据,从我们的客户端项目中,我们绑定或发送结果到这个服务器来执行数据库中的CRUD操作。 共享项目 正如名称所示,此项目类似于共享项目。这个项目作为我们的服务器项目和客户端项目的模型。在这个共享项目中声明的模型将在服务器和客户端项目中使用。我们还ins所有我们项目需要的包,例如使用实体框架,我们在这个共享的项目中安装所有的包。 运行以测试应用程序 当我们运行应用程序时,我们可以看到左边有导航,右边包含数据。我们可以看到,作为默认示例页面和菜单将显示在我们的Blazor网站。我们可以使用或删除页面,然后从自己的页面开始。 现在,让我们看看如何添加新页面来执行CRUD操作以维护学生细节。 使用实体框架 为了在我们的Blazor应用程序中使用实体框架,我们需要安装以下软件包: 安装包 选择工具,然后选择->NuGet包管理器->包管理器控制台。 你可以看到VS 2017 IDE底部的控制台,在控制台的组合框的右边,选择默认项目作为你的共享项目“select shared”。 你可以看到PM>然后复制并粘贴下面的行来安装数据库提供程序包。这个包用于将数据库提供程序设置为SQL Server。 隐藏,font color="#000000" face="Calibri" size="3"> 安装包Microsoft.EntityFrameworkCore.SqlServer< / font> 我们可以看到包安装在共享文件夹中。 安装实体框架。 你可以看到PM>然后复制并粘贴下面的行来安装EF包。 隐藏,复制CodeInstall-Package Microsoft.EntityFrameworkCore.Tools 你可以看到PM>并复制和粘贴下面一行设置连接字符串和创建DB上下文。这是一个重要的部分,因为我们需要提供SQL服务器名称、数据库名称和SQL服务器UID和SQL服务器密码,以便连接到数据库以执行CRUD操作。我们还提供了SQL表名,以便在共享项目中创建模型类。 隐藏,复制CodeScaffold-DbContext "Server= YourSqlServerName;Database=StudentsDB; userid = YourSqlUID;password= YourSqlPassword;Trusted_Connection=True; MultipleActiveResultSets Microsoft.EntityFrameworkCore.SqlServer = true” -OutputDir Models -Tables studentmaster 按enter键创建连接字符串、模型类和数据库上下文。 我们可以看到在共享项目中创建了StudentMasters模型类和StudentsDBContext类。我们将在服务器项目中使用这个模型和DBContext来创建执行CRUD操作的Web API。 为CRUD操作创建Web API 要创建我们的WEB API控制器,右键单击Controllers文件夹。单击Add New Controller。 在这里,我们将使用Scaffold方法创建WEB API。我们使用实体框架选择带有动作的API控制器。 从共享项目中选择我们的模型和DatabaseContext。 从共享项目中选择studentmaster模型来执行CRUD操作。 从共享项目中选择数据上下文类作为StudentsDBContext。我们的控制器名称将被自动添加。如果需要,您可以更改它并单击ADD。 我们的用于执行CRUD操作的Get/Post/Put和Delete方法的WEB API将被自动创建,现在我们不需要在WEB API中编写任何代码,因为我们已经使用了Scaffold方法来执行所有的操作和方法添加代码。 要测试Get方法,我们可以运行我们的项目并复制Get方法API路径。在这里,我们可以看到获取API /StudentMasters/的API路径。 运行程序并粘贴API路径来测试输出。 现在,我们将把所有这些WEB API Json结果绑定到客户端项目的视图页面中。 与客户项目合作 首先,我们需要添加新的Razor视图页面。 添加Razor视图 要添加Razor视图页面,右键单击客户端项目中的Pages文件夹。点击添加>>新项目。 选择剃须刀视图>>输入您的页面名称。在这里,我们将名称命名为Students.chtml。 在Razor视图页面中,我们有三部分的代码首先是我们进口进口部分的引用和模型使用在视图中,HTML设计和数据绑定最后一部分,我们有部分功能调用的所有web API将在我们的HTML页面并执行客户端业务逻辑被显示在视图页面。 导入部分 首先,在Razor视图页面中导入所有需要的支持文件和引用。在这里,我们首先导入了要在视图中使用的模型类,还导入了用于调用Web API以执行CRUD操作的HTTPClient。 隐藏,复制Code

  1. @using BLAZORASPCORE.Shared
  2. @using BLAZORASPCORE.Shared.Models
  3. @page "/Students"
  4. @using Microsoft.AspNetCore.Blazor.Browser.Interop
  5. @inject HttpClient Http

HTML设计和数据绑定部分 接下来,我们设计学生详细信息页面来显示来自数据库的学生详细信息,并创建一个表单来插入和更新学生详细信息。我们还有Delete按钮从数据库中删除学生记录。 对于Blazor中的绑定,我们使用bind="@stds。并使用onclick="@AddNewStudent"调用该方法。 隐藏,收缩,复制Code

  1. <h1> ASP.NET Core BLAZOR CRUD demo for Studetns</h1>
  2. <hr/>
  3. <tablewidth="100%"style="background:#05163D;color:honeydew">
  4. <tr>
  5. <tdwidth="20">&nbsp;</td>
  6. <td>
  7. <h2> Add New Student Details</h2>
  8. </td>
  9. <td>&nbsp;</td>
  10. <tdalign="right">
  11. <buttonclass="btn btn-info"onclick="@AddNewStudent">Add New Student</button>
  12. </td>
  13. <tdwidth="10">&nbsp;</td>
  14. </tr>
  15. <tr>
  16. <tdcolspan="2"></td>
  17. </tr>
  18. </table>
  19. <hr/>
  20. <form>
  21. <tableclass="form-group">
  22. <tr>
  23. <td>
  24. <labelfor="Name"class="control-label">Student ID</label>
  25. </td>
  26. <td>
  27. <inputtype="text"class="form-control"bind="@stds.StdId"readonly/>
  28. </td>
  29. <tdwidth="20">&nbsp;</td>
  30. <td>
  31. <labelfor="Name"class="control-label">Student Name</label>
  32. </td>
  33. <td>
  34. <inputtype="text"class="form-control"bind="@stds.StdName"/>
  35. </td>
  36. </tr>
  37. <tr>
  38. <td>
  39. <labelfor="Email"class="control-label">Email</label>
  40. </td>
  41. <td>
  42. <inputtype="text"class="form-control"bind="@stds.Email"/>
  43. </td>
  44. <tdwidth="20">&nbsp;</td>
  45. <td>
  46. <labelfor="Name"class="control-label">Phone</label>
  47. </td>
  48. <td>
  49. <inputtype="text"class="form-control"bind="@stds.Phone"/>
  50. </td>
  51. </tr>
  52. <tr>
  53. <td>
  54. <labelfor="Name"class="control-label">Address</label>
  55. </td>
  56. <td>
  57. <inputtype="text"class="form-control"bind="@stds.Address"/>
  58. </td>
  59. <tdwidth="20">&nbsp;</td>
  60. <td></td>
  61. <td>
  62. <buttontype="submit"class="btn btn-success"onclick="@(async () => await AddStudent())"style="width:220px;">Save</button>
  63. </td>
  64. </tr>
  65. </table>
  66. </form>
  67.  
  68. <tablewidth="100%"style="background:#0A2464;color:honeydew">
  69. <tr>
  70. <tdwidth="20">&nbsp;</td>
  71. <td>
  72. <h2>Student Details</h2>
  73. </td>
  74.  
  75. </tr>
  76. <tr>
  77. <tdcolspan="2"></td>
  78. </tr>
  79. </table>
  80.  
  81. @if (student == null)
  82. {
  83. <p><em>Loading...</em></p>
  84. }
  85. else
  86. {
  87. <tableclass="table">
  88. <thead>
  89. <tr>
  90. <th>Student ID</th>
  91. <th>Student Name</th>
  92. <th>Email</th>
  93. <th>Phone</th>
  94.  
  95. <th>Address</th>
  96. </tr>
  97. </thead>
  98. <tbody>
  99. @foreach (var std in student)
  100. {
  101. <tr>
  102. <td>@std.StdId</td>
  103. <td>@std.StdName</td>
  104. <td>@std.Email</td>
  105. <td>@std.Phone</td>
  106.  
  107. <td>@std.Address</td>
  108. <td><buttonclass="btn btn-primary"onclick="@(async () => await EditStudent(@std.StdId))"style="width:110px;">Edit</button></td>
  109. <td><buttonclass="btn btn-danger"onclick="@(async () => await DeleteStudent(@std.StdId))">Delete</button></td>
  110. </tr>
  111. }
  112. </tbody>
  113. </table>
  114. }

函数部分 函数部分调用所有的th将web API绑定到HTML页面中,并执行在视图页面中显示的客户端业务逻辑。在这个函数中,我们创建了一个单独的用于添加、编辑和删除学生详细信息的函数,并调用Web API Get、Post、Put和Delete方法来执行CRUD操作,在HTML中,我们调用所有函数并绑定结果。 隐藏,收缩,复制Code

  1. @functions {
  2. StudentMasters[] student;
  3.  
  4. StudentMasters stds = new StudentMasters();
  5. string ids = "0";
  6. bool showAddrow = false;
  7. protected override async Task OnInitAsync()
  8. {
  9. student = await Http.GetJsonAsync<StudentMasters[]>("/api/StudentMasters/");
  10. }
  11.  
  12. void AddNewStudent()
  13. {
  14. stds = new StudentMasters();
  15. }
  16. // Add New Student Details Method
  17. protected async Task AddStudent()
  18. {
  19. if (stds.StdId == 0)
  20.  
  21. {
  22. await Http.SendJsonAsync(HttpMethod.Post, "/api/StudentMasters/", stds);
  23.  
  24. }
  25. else
  26. {
  27. await Http.SendJsonAsync(HttpMethod.Put, "/api/StudentMasters/" + stds.StdId, stds);
  28. }
  29. stds = new StudentMasters();
  30. student = await Http.GetJsonAsync<StudentMasters[]>("/api/StudentMasters/");
  31. }
  32. // Edit Method
  33. protected async Task EditStudent(int studentID)
  34. {
  35. ids = studentID.ToString();
  36. stds = await Http.GetJsonAsync<StudentMasters>
  37. ("/api/StudentMasters/" + Convert.ToInt32(studentID));
  38. }
  39. // Delte Method
  40. protected async Task DeleteStudent(int studentID)
  41. {
  42. ids = studentID.ToString();
  43. await Http.DeleteAsync("/api/StudentMasters/" + Convert.ToInt32(studentID));
  44.  
  45. // await Http.DeleteAsync("/api/StudentMasters/Delete/" + Convert.ToInt32(studentID));
  46.  
  47. student = await Http.GetJsonAsync<StudentMasters[]>("/api/StudentMasters/");
  48. }
  49. }

导航菜单 现在我们需要将这个新添加的Students Razor页面添加到左边的导航栏中。要添加这个,打开共享文件夹并打开导航菜单。cshtml页面并添加菜单。 隐藏,复制Code

  1. <liclass="nav-item px-3">
  2. <NavLinkclass="nav-link"href="/Students">
  3. <spanclass="oi oi-list-rich"aria-hidden="true"></span> Students Details
  4. </NavLink>
  5. </li>

构建并运行应用程序 的兴趣点 注意,在创建DBContext和设置连接字符串时,不要忘记添加SQL连接字符串。希望你们都喜欢这篇文章,在下一篇文章中,我们将看到更多关于Blazor的例子,使用Blazor真的非常酷。 历史 2018-05-18: BLAZORASPCORE.zip 本文转载于:http://www.diyabc.com/frontweb/news18995.html

ASP。NET Core Blazor CRUD使用实体框架和Web API的更多相关文章

  1. 【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

    HTTP is not just for serving up web pages. It's also a powerful platform for building APIs that expo ...

  2. [转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

    本文转自:https://www.cnblogs.com/inday/p/6288707.html HTTP is not just for serving up web pages. It’s al ...

  3. 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(二)-- Web Api Demo

    在上一篇里,我已经建立了一个简单的Web-Demo应用程序.这一篇将记录将此Demo程序改造成一个Web Api应用程序. 一.添加ASP.NET Core MVC包 1. 在project.json ...

  4. 022年9月12日 学习ASP.NET Core Blazor编程系列三——实体

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  5. 学习ASP.NET Core Blazor编程系列八——数据校验

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  6. 学习ASP.NET Core Blazor编程系列十——路由(上)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  7. ASP.NET Core Blazor 用Inspinia静态页模板搭建简易后台(实现菜单选中)

    Blazor 是一个用于使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建丰富的交互式 UI. 共享使用 .NET 编写的服务器端和客户端应用逻辑 ...

  8. ASP.NET Core Blazor 初探之 Blazor Server

    上周初步对Blazor WebAssembly进行了初步的探索(ASP.NET Core Blazor 初探之 Blazor WebAssembly).这次来看看Blazor Server该怎么玩. ...

  9. [Asp.Net Core] Blazor Server Side 扩展用途 - 配合CEF来制作带浏览器核心的客户端软件 (二) 可运行版本

    前言 大概3个星期之前立项, 要做一个 CEF+Blazor+WinForms 三合一到同一个进程的客户端模板. 这个东西在五一的时候做出了原型, 然后慢慢修正, 在5天之前就上传到github了. ...

随机推荐

  1. BasicInterpreter1.00 运行简单Basic脚本 打印变量及字符串

    源码下载:https://files.cnblogs.com/files/heyang78/basicInterpreter-20200529-1.rar 脚本: count= print(count ...

  2. SQL Node 1.05版

    输出: select a.f1, b.f2 from table01 a, ( select a from tb ) b where a.f1=1 and b.f2=2 or b.f3=3 order ...

  3. 获取JSO字符串的key和value值

    import com.alibaba.fastjson.JSON; import java.util.ArrayList; import java.util.HashMap; import java. ...

  4. 【盗墓笔记】图解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar

    将一些项目中的一些独立功能打包成aar,不仅能于项目解耦,还能够提供给其它项目使用相同的功能,可谓是为项目开发带来了很大的便利.最近第一次做sdk,碰到一些问题,花了不少时间才解决,所以这里做一下简单 ...

  5. python基础:多进程、多线程

    一.定义和区别 1.一个任务就是一个进程,进程就是资源的集合.比如打开浏览器,启动一个进程.当一个进程需要干很多事的时候,就需要执行多个子任务,这些子任务就是线程. 2.线程是包含在进程中的,每个进程 ...

  6. pytest文档1-pytest+Allure+jenkins+邮箱发送

    前言: 1.pytest+allure是目前很多公司使用较多的一种报告样式,因为它更详细,各种指标更直观(简单的说就是看着更高大上,更能装X). 环境准备: 1.Windows10 2.Allure ...

  7. [LeetCode] 221. 最大正方形(DP)

    题目 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 ...

  8. [LeetCode]33. 搜索旋转排序数组(二分)

    题目 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存在这个目 ...

  9. 如何使用 TDengine 2.0 最新开源的集群功能?

    导读:8月3日,TDengine 发布了 v2.0 版本,这次更新最大的亮点是,我们将分布式集群功能开源.开源后,引起了很大反响,又连续几天在 GitHub 趋势榜排名第一.不少关注TDengine的 ...

  10. P1295 [TJOI2011]书架 线段树优化dp,单调栈

    P1295 [TJOI2011]书架 本题思路比较好想(对我来说不是),但代码细节很多,奈何洛谷的题解只有思路,然后就是 没有丝毫解释的代码,让人看起来很头疼(~~ 尤其是像我这样的蒟蒻~~),所以便 ...