.NET Core MVC开发入门

作为一名.NET开发者,原本必须使用Windows操作系统进行开发。但是随着.NET Core的发布,得以在不同的操作系统上进行开发。最初,遇到了一些问题,但随着时间的推移,逐渐解决了这些问题,现在可以使用Visual Studio Mac进行开发。本系列文章共三篇,将逐步展示如何在Mac OS上使用Visual Studio for Mac和Visual Studio Code创建.NET CoreMVC项目,连接到AWS RDS数据库,并使用Entity Framework创建数据库和应用程序之间的连接。

创建MVC项目

首先,需要创建一个简单的MVC项目。为此,请打开Visual Studio并创建一个新项目(图1)。接下来,选择.NET Core3.1作为目标框架。

(图1 - 创建新的MVC项目)

也许这会让感到惊讶,但在这里将看到一个完全空白的窗口,但不用担心,这只是因为解决方案资源管理器被关闭了。查看-布局-解决方案资源管理器。在这里,就像在Visual Studio Windows中一样,在MVC项目中有:

  • 模型(Models)
  • 控制器(Controllers)
  • 视图(Views)

接下来,需要连接服务以运行应用程序。由于将使用Entity Framework与数据库进行通信,因此需要连接与它相关的一切。图2显示了连接服务的示例。

(图2 - 连接服务)

将创建一个名为Hospitals的模型。在模型文件夹中创建一个新类。它将包含以下代码:

public class Hospital { [Key] public int HospitalId { get; set; } [StringLength(100)] [Display(Name = "Hospital Name")] public string HospitalName { get; set; } [Required] [StringLength(100)] [Display(Name = "Decision Maker")] public string DecisionMaker { get; set; } [Required] [StringLength(100)] [Display(Name = "Email")] public string Email { get; set; } [Required] [StringLength(100)] [Display(Name = "Phone")] public string Phone { get; set; } }

转到解决方案资源管理器并创建一个名为Data的文件夹,然后创建一个空类。它应该看起来像图3。

(图3 - 创建DBContext类)

为了将应用程序与数据库连接起来,需要在DBContext类中添加以下代码:创建一个从DbContext继承的类。

public class DBContext : DbContext { public DbSet Hospitals { get; set; } }

接下来,需要定义一个表,创建模型时将与之建立连接。很多人不使用它,但使用它,因为在经验中,有很多情况下模型类名与数据库中的名称不同。

protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().ToTable("Hospitals"); }

然后,将指示数据库的位置,目前先这样设置,稍后在下一步中再回来这里。

protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlServer("");

让创建一个静态方法,它将返回一个新的上下文给。

public static DBContext Create() { return new DBContext(); }

结果,应该得到以下代码:

public class DBContext : DbContext { public DbSet Hospitals { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().ToTable("Hospitals"); } protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlServer(""); }

接下来,需要创建三个方法:显示表中的所有记录,向表中添加新记录,以及创建一个空页面来填充模型。由于本文的目的是展示操作的基本原理,不再展示它。

让创建一个新的控制器并将其命名为HospitalsController(图4)。

(图4 - 创建新控制器)

接下来,让继承类Controller类。

public class HospitalsController : Controller { private DBContext _context; public HospitalsController() { _context = new DBContext(); } protected override void Dispose(bool disposing) => _context.Dispose(); }

接下来,让创建三个方法。第一个方法将显示实体列表。在这段代码中,从数据库中读取值并将它们返回到稍后将创建的视图中(Index, Save, New)。添加以下代码:

[Route("Hospitals/Index")] public ActionResult Index() { var HospitalsList = _context.Hospitals; return View("Index", HospitalsList); }

接下来,创建第二个方法将创建一个新的实体。添加以下代码:

public ActionResult New() { var hospital = new Hospital(); return View("HospitalsForm", hospital); }

接下来,创建第三个方法将保存一个新的实体。让添加以下代码:

public ActionResult Save(Hospital hospital) { if (!ModelState.IsValid) { var _hospital = hospital; return View("CustomerForm", hospital); } _context.Hospitals.Add(hospital); _context.SaveChanges(); return RedirectToAction("Index", "Hospitals"); }

最后,需要做的是将视图添加到应用程序中。

接下来,让编辑Shared文件夹中的_Layout。

<li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Hospitals" asp-action="Index"> Hospitals </a> </li>

对于例子,用两个视图。Visual Studio for Mac没有标准功能,可以立即创建一个视图而不需要连接各种扩展(图5)。

(图5 - 不能从控制器创建视图)

要创建这个,转到视图选项卡并创建一个名为Hospitals的新文件夹。接下来,创建两个视图文件 - Index, HospitalsForm。它将向显示一个列表,并且还会有一个创建新实体的按钮。

将以下代码添加到Index:

@model IEnumerable<My_Code_first.Models.Hospital> @{ ViewBag.Title = "Hospitals"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2> Customers </h2> <p> @Html.ActionLink("New Hospital", "New", "Hospitals", null, new { @class = "btn btn-primary" }) </p> <table class="table"> <tr> <th> Hospital ID </th> <th> Hospital Name </th> <th> Decisionmaker </th> <th> Phone </th> <th> Email </th> </tr> @foreach (var hospital in Model) { <tr> <td> @Html.DisplayFor(hospitalId => hospital.Hospitalid) </td> <td> @Html.DisplayFor(hospitalName => hospital.HospitalName) </td> <td> @Html.DisplayFor(hospitalDicisionmaker => hospital.Dicisionmaker) </td> <td> @Html.DisplayFor(hospitalPhone => hospital.Phone) </td> <td> @Html.DisplayFor(hospitalEmail => hospital.Email) </td> </tr> } </table>

接下来,代码在HospitalForm中。

@model My_Code_first.Models.Hospital @using (Html.BeginForm("Save", "Hospitals")) { @Html.ValidationSummary() <div class="form-group"> @Html.LabelFor(m => m.HospitalName) @Html.TextBoxFor(m => m.HospitalName, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.HospitalName) </div> <div class="form-group"> @Html.LabelFor(m => m.Dicisionmaker) @Html.TextBoxFor(m => m.Dicisionmaker, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Dicisionmaker) </div> <div class="form-group"> @Html.LabelFor(m => m.Email) @Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Email) </div> <div class="form-group"> @Html.LabelFor(m => m.Phone) @Html.TextBoxFor(m => m.Phone, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Phone) </div> <button type="submit" class="btn btn-primary"> Save </button> @Html.HiddenFor(m => m.Hospitalid) @Html.AntiForgeryToken() }

对于这一步,已经完成了。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485