在 Mac OS 上使用 Visual Studio 创建 .NET MVC Web 应用程序 [第一部分]





1.00/5 (1投票)
本系列文章共三篇,我将一步步演示如何创建一个 .NET core MVC 项目
引言
我一直想知道是否可以使用 Mac OS 的功能齐全的 Mac 来开发我的项目,因为我是一名 .NET 开发人员,使用 Windows 对我来说至关重要。但自从 .NET Core 发布以来,我不仅可以在 Windows 计算机上进行开发。起初,我遇到过各种问题,但渐渐地我都解决了,现在我正在使用 Visual Studio Mac 进行开发。本系列文章共三篇,我将一步步演示如何创建一个 .NET Core MVC 项目,将项目连接到 AWS RDS 数据库,使用 Entity Framework 在数据库和应用程序之间建立连接,所有这些都将在 Mac OS 上完成,并使用 Visual Studio for Mac 以及 Visual Studio code。
创建 MVC 项目
首先,我们需要创建一个简单的 MVC 项目。为此,请打开 Visual Studio 并创建一个新项目(图 1)。接下来,选择 .NET core 3.1 作为目标框架。
这可能让您感到惊讶,但在这里我们会看到一个完全空白的窗口,但不要担心,这只是“解决方案资源管理器”已关闭。视图-布局-解决方案资源管理器。在这里,就像在 Visual Studio 窗口中一样,在 MVC 项目中我们有 _Models_、_Controllers_、_Views_ 文件夹。
接下来,我们需要为应用程序的运行连接服务。由于我们将使用 Entity Framework 进行数据库通信,因此我们需要与它相关的所有内容。图 2 中给出了连接服务的示例。
其次,让我们创建我们的模型。它将被命名为 Hospitals。在 _Model_ 文件夹中创建一个新类。它将包含以下代码
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 = "Dicision Maker")]
public string Dicisionmaker { 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。
此外,为了将我们的应用程序与数据库连接,您需要将以下代码添加到 `DBContext` 类中:创建一个继承自 `DbContext` 的类。
public class DBContext: DbContext
然后添加我们数据库中表的链接
public DbSet <Hospital> Hospitals {get; set; }
接下来,我们将定义一个将在创建模型时建立连接的表。很多人不使用它,但我使用它,因为根据我的经验,有很多情况模型类的名称与数据库中的名称不同。
protected override void OnModelCreating (ModelBuilder modelBuilder)
{
modelBuilder.Entity <Hospital> () .ToTable ("Hospitals");
}
然后,我们将指示数据库的位置,目前我们就这样留着,并在后续步骤中再回来。
protected override void OnConfiguring (DbContextOptionsBuilder options)
=> options.UseSqlServer ("");
让我们创建一个 `static` 方法,它将返回一个新的上下文给我们。
public static DBContext Create ()
{
return new DBContext ();
}
结果,您应该得到以下代码
public class DBContext : DbContext
{
public DbSet<Hospital> Hospitals { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Hospital>().ToTable("Hospitals");
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer("");
public DBContext()
{
}
public static DBContext Create()
{
return new DBContext();
}
}
现在我们准备创建控制器了。接下来,我们需要创建三个方法:显示表中的所有记录,向表中添加新记录,以及创建一个空页面来填充模型。我不再一一展示,因为本文的目的是展示操作的基本原理。
让我们创建一个新的控制器并将其命名为 `HospitalsController`(图 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 CustomersList = _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>
接下来,对于我们的示例,我们只做了两个视图。Mac 上的 Visual Studio 没有标准的内置功能,无需连接各种扩展即可立即从控制器创建视图(图 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> Dicisionmaker</th>
<th> Phone</th>
<th> Email</th>
@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()
}
到此为止,这个步骤就完成了。
结论
本文到此结束,我们创建了一个新的 .NET MVC 应用程序,创建了一个模型、一个控制器和一个视图。此外,我们准备了一个用于创建数据库连接的上下文。 在下一篇文章中,我将向您展示如何将应用程序链接到云数据库。