asp.net mvc脚手架

它是ASP.NET的一个特性,它允许我们快速生成函数代码。它也被称为代码生成器框架。它预装在Visual Studio 2013和更高版本中。
要创建基本的CRUD应用程序,搭建是最佳选择。它减少了时间,产生干净的代码。在这里,我们使用scaffolding来开发CRUD应用程序。
ASP.NET的CRUD的例子
这个示例包含以下几个步骤。
创建新项目
选择文件菜单从菜单栏和选择新-> 项目。我们也可以使用快捷键Ctrl+Shift+N来创建一个新项目。

asp.net mvc脚手架

文章图片
这将弹出一个包含项目的窗口。我们选择ASP.NET的Web应用程序。
asp.net mvc脚手架

文章图片
单击ok后,它会弹出一个新的模板窗口。在这里,我们选择MVC模板,用于创建MVC web应用程序。
asp.net mvc脚手架

文章图片
点击确定,然后它将创建一个项目,并显示一个进度条,如下所示。
asp.net mvc脚手架

文章图片
CRUD项目结构
asp.net mvc脚手架

文章图片
我们可以通过按Ctrl+F5来运行这个应用程序。它将为浏览器生成一个默认的索引页,如下所示。
asp.net mvc脚手架

文章图片
为了创建完整的crud,我们需要在项目中添加模型、视图和控制器。这里,我们创建一个处理数据的模型。
创建一个新模型
我们正在项目的Models文件夹中创建一个Student模型。右键单击Models文件夹并选择add-> 类,将弹出一个对话框。通过提供名称来创建类。
asp.net mvc脚手架

文章图片
这个模型类有一些源代码,可以像下面这样修改它的代码。
/ / Student.cs
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace CrudExample.Models { public class Student { public int ID { get; set; } [Required] public string Name { get; set; } [Required] [EmailAddress] public string Email { get; set; } [Required] public string Contact { get; set; } } }

创建一个上下文类
我们在Models文件夹中创建了另一个类,它用于与实体框架通信并执行数据库操作。这个类继承了DbContext类。
/ / StudentRecord.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity.ModelConfiguration.Conventions; using System.Data.Entity; namespace CrudExample.Models { public class StudentRecord : DbContext { public DbSet< Student> Students { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove< PluralizingTableNameConvention>(); } } }

将脚手架添加到项目中
右键单击Controllers文件夹并添加脚手架,就像我们在屏幕截图中所做的那样。
asp.net mvc脚手架

文章图片
它将弹出以下对话框。选择带有实体框架的控制器。
asp.net mvc脚手架

文章图片
然后点击添加按钮。它请求模型和上下文名称。填写条目并单击ok。
asp.net mvc脚手架

文章图片
单击add按钮后,它将创建一个StudentsController控制器和一个Students文件夹。学生文件夹包含每个CRUD操作的web页面。
【asp.net mvc脚手架】/ / StudentsController.cs
using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Net; using System.Web; using System.Web.Mvc; using CrudExample.Models; namespace CrudExample.Controllers { public class StudentsController : Controller { private StudentRecord db = newStudentRecord(); // GET: Students public ActionResult Index() { return View(db.Students.ToList()); } // GET: Students/Details/5 public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Student student = db.Students.Find(id); if (student == null) { return HttpNotFound(); } return View(student); } // GET: Students/Create public ActionResult Create() { return View(); } // POST: Students/Create // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see https://go.microsoft.com/fwlink/?LinkId=317598. [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create([Bind(Include = "ID,Name,Email,Contact")] Student student) { if (ModelState.IsValid) { db.Students.Add(student); db.SaveChanges(); return RedirectToAction("Index"); } return View(student); } // GET: Students/Edit/5 public ActionResult Edit(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Student student = db.Students.Find(id); if (student == null) { return HttpNotFound(); } return View(student); } // POST: Students/Edit/5 // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see https://go.microsoft.com/fwlink/?LinkId=317598. [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "ID,Name,Email,Contact")] Student student) { if (ModelState.IsValid) { db.Entry(student).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(student); } // GET: Students/Delete/5 public ActionResult Delete(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Student student = db.Students.Find(id); if (student == null) { return HttpNotFound(); } return View(student); } // POST: Students/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public ActionResult DeleteConfirmed(int id) { Student student = db.Students.Find(id); db.Students.Remove(student); db.SaveChanges(); return RedirectToAction("Index"); } protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); } } }

视图中的Students文件夹包含以下文件。
asp.net mvc脚手架

文章图片
Index.cshtml文件包含以下代码。
/ / Index.cshtml
@model IEnumerable< scaffoldingTest.Models.Student> @{ ViewBag.Title = "Index"; } < h2>Index< /h2> < p> @Html.ActionLink("Create New", "Create") < /p> < table class="table"> < tr> < th> @Html.DisplayNameFor(model => model.Name) < /th> < th> @Html.DisplayNameFor(model => model.Email) < /th> < th> @Html.DisplayNameFor(model => model.Contact) < /th> < th>< /th> < /tr> @foreach (var item in Model) { < tr> < td> @Html.DisplayFor(modelItem => item.Name) < /td> < td> @Html.DisplayFor(modelItem => item.Email) < /td> < td> @Html.DisplayFor(modelItem => item.Contact) < /td> < td> @Html.ActionLink("Edit", "Edit", new { id=item.ID }) | @Html.ActionLink("Details", "Details", new { id=item.ID }) | @Html.ActionLink("Delete", "Delete", new { id=item.ID }) < /td> < /tr> } < /table>

输出:
右击Index.cshtml文件,并选择“查看在浏览器”,这将执行文件,并产生以下输出。
/ /index文件
此索引文件用于显示学生记录。当前表是空的,所以它不显示任何数据。
asp.net mvc脚手架

文章图片
添加新的学生
我们可以通过点击Create new按钮来添加新学生。这将重定向到学生表单。
asp.net mvc脚手架

文章图片
添加它之后,我们又添加了两个条目,然后重定向回索引文件。现在,它包含三个学生记录。
asp.net mvc脚手架

文章图片
更新记录
我们可以通过点击编辑按钮来更新记录。这将重定向到更新表单。下面的屏幕截图显示了编辑页面。
asp.net mvc脚手架

文章图片
更新记录索引页后,如下所示
asp.net mvc脚手架

文章图片
删除记录
我们可以简单地通过点击提供的删除链接来删除任何记录。让我们把罗曼·约翰从表中删除。确认消息将显示给用户以确定。
asp.net mvc脚手架

文章图片
asp.net mvc脚手架

文章图片

    推荐阅读