65.9K
CodeProject 正在变化。 阅读更多。
Home

从 MVC 开始 - 新手入门(第二部分)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.83/5 (12投票s)

2014 年 3 月 24 日

CPOL

8分钟阅读

viewsIcon

23682

downloadIcon

331

引言

大家好,希望你们已经看了上一篇文章,其中我们学习了如何开始使用 MVC 以及先决条件。这是文章“从 MVC 开始 - 新手入门指南(第 1 部分)”的续篇。正如我所承诺的,在这里你将学习如何使用 MVC 和 Entity To Sql 来查看已保存的记录、编辑记录。那么,让我们开始吧。

背景

如果你已经看过了本系列的第 1 部分,那么你已经准备好阅读本文了,否则请先阅读第 1 部分。虽然如果你已经了解 MVC,也可以从本文开始,但我仍然建议你先通读上一篇文章。那么,让我们开始“MVC 中的更新”。祝你好运!

使用代码

1. 查看已保存的记录(列表视图)

到目前为止,我们已经学习了如何向列表中添加新记录。现在,让我们开始学习如何查看我们添加的记录。这一部分至关重要,因为我们需要多次显示已保存的记录。所以在这里,你将看到一个简单的将记录显示在列表(表格)形式中的方法,当然你可以根据自己的需要自定义视图。这非常简单。

1. 在控制器中添加 Action 方法

现在,首先我们需要添加一个 Action,它将返回一个用于显示列表数据的视图。下面是控制器代码的快照。我们在与第 1 部分相同的控制器(即“FirstController”)中添加了这个 Action(方法)。

注意:要了解如何添加 Views Controllers ,请参阅上一篇文章(第 5 步和第 6 步)。

         public ActionResult ViewAllRecords() 
        {
            //TODO : your entity framework code for showing the employee details
            StartWithMVCEntities db = new StartWithMVCEntities();
            List<Employee> empList = db.Employees.ToList();
            return View(empList);
        } 

所以,这里你可能已经了解到,在 MVC 中,我们使用同一个控制器,但它可以通过使用多个 Model 来渲染或服务于多个用户视图。

现在让我们分析一下我们的代码,在第一行,我们建立了实体对象与数据库的连接,获取了所有记录,并将它们作为一个“List”对象,类型为 List<Employee>,传递给了视图。

现在我们需要一个视图来显示这个可枚举对象中包含的记录。所以接下来是添加适当的视图。

2. 添加视图及其内容

现在请按照步骤为这个方法(Action 方法)添加视图。下面是它的 Razor 代码(HTML)。

@model List<StartWithMVC.Models.Employee>
@{
    ViewBag.Title = "ViewAllRecords";
}
<h2>View Records</h2>
<div class="table_container">
    <table>
        <thead>
            <th>HR Emp Id</th>
            <th>Last Name</th>
            <th>First Name</th>
            <th>City</th>
            <td>Edit</td>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>@item.HREmpId</td>
                    <td>@item.LastName</td>
                    <td>@item.FirstName</td>
                    <td>@item.City</td>
                    <td>@Html.ActionLink("Edit", "EditRecord", new { recordID = @item.EmpId })</td>
                </tr>
            }
        </tbody>
</div>  

现在我们必须牢记一点,传递给这个 Model 的对象是“List”类型,所以我们在视图的开头添加了“List<StartWithMVC.Models.Employee>"。这样做可以让我们遍历传递过来的 Model 对象中的每一条记录。

注意:你可以使用任何可枚举对象(IDictionary, IEnumerable...等)来实现此目的,但 List 是最简单易懂的。

这里有一个快照,详细解释了这部分代码中的任何语法含义。

在这里,你会看到我使用了 ‘foreach’ 循环来遍历 Model 中的每个项目。“@item”对象是强类型化的,可以为我们添加的每个属性提供智能提示帮助。这样可以减少错误的可能性,因为强类型对象在编译时就会被验证。因此,修复错误非常容易,或者说在大多数情况下它们是防错的。

现在是时候构建项目来检验我们的成果了。

3. 构建并运行项目

现在我们已经准备好了显示记录的视图。只需运行项目,你就会看到所有已添加记录的列表视图。这是它的截图。

就是这样。是不是很简单!现在,自己尝试一下吧。祝你好运。

注意:我在这里添加了一些“样式”来让这个视图看起来像这样。你也可以将这些 CSS 添加到你的视图中。就在这里。只需将这个块粘贴到视图中的任何位置。

 <style type="text/css">
table td, th
{
    border:1px solid black;
    padding:2px;
}
div.table_container
{
    float:left;
    width:100%;
}
</style> 

但始终建议为你的样式编写样式表,并将其包含在捆绑包注册中。关于捆绑包注册的任何帮助,请随时提问。

2. 编辑已保存的记录

1. 编写编辑记录的 Action

如果你注意到,我在上面的 'cshtml' 文件中添加了一个带有 'EditRecords' 方法引用的 Action Link。到目前为止,如果你运行项目并点击“Edit”链接,它会显示错误。这是因为 'controller 将会搜索 'EditRecords' action method,但它还不存在。所以它会抛出错误。

现在我们将看到如何使用 'EditRecords' action 来编辑记录。下面是编辑记录方法的代码。

         public ActionResult EditRecord(int recordID)
        {
            //TODO : your entity framework code for showing the employee details
            StartWithMVCEntities db = new StartWithMVCEntities();
            Employee objEmp = db.Employees.ToList().Find(m => m.EmpId == recordID); 
            return View("Index", objEmp);
        } 

现在在上面的方法中,你注意到的事情是

1. 参数 'recordID':这实际上是从编辑 Action Link 点击接收的参数。现在,当你将鼠标悬停在列表视图中编辑链接上时,你会看到类似这样的 URL:

 https://:6092/First/EditRecord?recordID=2 

这里是关于根据上面编写的代码,它意味着什么的详细说明:

/First -- > 指的是 FirstController,所以它会查找这个控制器

/EditRecord -- > 指的是我们 'FirstController' 中的 'EditRecord' 方法

?recordID=2 -- > 指的是它将搜索一个接受名为 'recordID' 的参数的方法,并且 '2' 将作为参数值传递。

2. Linq 表达式:这里我们正在获取具有 EmpID 等于传入的 recordID 的记录的 employee 对象。这是纯粹的 Linq to Entity 对象。

2. 返回:在这里你可以看到,我们使用 'Index' 视图返回了 employee 记录的对象。那么为什么我们在这里使用 'Index' 视图呢??

答案:要编辑记录,我们需要为表中的每一列提供编辑字段。为此,我们有两种选择。

1. 添加新视图

2. 重新使用用于添加新记录的视图。

所以选择权在你,你想怎么做。但通常建议尽可能减少视图和控制器。此外,我们知道我们的 'Index' 视图是 'Employee' 类型。所以我使用了那个视图。现在它将显示包含在 'objEmp' 对象中的字段值。所以

我们就可以满足编辑记录的需求了。现在这里是它的快照,以便更好地解释。

2. 构建并运行项目

现在我们已经完成了编辑记录代码的编写。现在只需运行项目。

现在去查看记录页面,然后点击编辑链接。你将被重定向到 Index 视图,其中的字段将包含我们要编辑的记录的值。这是截图。

所以我们现在处于添加新记录的同一个视图,但在这里当你点击提交时,它将更新记录而不是添加新记录。我们如何在控制器中处理这个问题将在下一步说明。

3. 用于更新记录的方法

如果你还记得,我们已经编写了一个方法来处理提交按钮的“click”事件,通过表单 post 方法添加新记录。在这里,我们也将通过修改现有的添加新记录的方法,即 'SaveEmployee' 来做同样的事情。

这是新方法:

 public ActionResult SaveEmployee(Employee objEmployee)
        {
            StartWithMVCEntities db = new StartWithMVCEntities();
            if (objEmployee != null && objEmployee.EmpId != 0)
            {
                //TODO : your entity framework code for updateing the employee details
                //fetch object for the editted employee record
                Employee objEmp = db.Employees.ToList().Find(m => m.EmpId == objEmployee.EmpId);
                //Assign the edited value to getch object
                objEmp.HREmpId = objEmployee.HREmpId;
                objEmp.FirstName = objEmployee.FirstName;
                objEmp.LastName = objEmployee.LastName;
                objEmp.Address = objEmployee.Address;
                objEmp.City = objEmployee.City;
                //finally save the chagne to database
                db.SaveChanges();
            }
            else
            {
                //TODO : your entity framework code for saving the employee details
                db.Employees.AddObject(objEmployee);
                db.SaveChanges();
            }
            return RedirectToAction("ViewAllRecords");
        } 

需要注意的改动

由于我们将 employee 记录对象传递给了视图,所以在编辑情况下 EmpID(主键)的值是非零的。所以我添加了基于 EmpID 的更新和保存检查。

现在,如果我们是从 'EditRecords' action 进入 Index 页面的,那么 EmpID 的值总是非零的,这样控制器方法 'SaveEmployee' 就会知道这是更新情况,而不是新记录保存情况。

4. 删除已保存的记录

在 MVC 中从数据库删除记录非常简单,步骤与之前执行的类似。为此,我们需要遵循以下步骤:

1. 创建删除链接

现在我们将向“查看所有记录”页面添加一列。这一列将包含一个链接,用于从我们的数据库中删除相应的记录。所以我们开始吧。

将以下代码添加到 '.cshtml' 文件中(根据第“2. 添加视图及其内容”步中的代码)。

用于表格标题

<td><b>Delete</b></td>

用于表格行

 <td>@Html.ActionLink("Delete", "DeleteRecord", new { recordID = @item.EmpId })</td> 

现在你可以看到,在点击这个 Action Link 时,我们调用了 'DeleteRecord' 方法。

这是它在用户端的显示效果。

delete

2. 控制器方法

现在,让我们看看要写入我们控制器删除记录的方法。在此之前,先看一下创建的链接 HTML:

<a href="/First/DeleteRecord?recordID=2">Delete</a>  

我们现在清楚,它正在从我们的 'FirstController' 调用 'DeleteRecord' 方法,该方法接受 recordID 作为参数。对于这个非常记录,recordID 的值为 2

下面是从数据库删除记录的方法。

        public ActionResult DeleteRecord(int recordID)
        {
            //TODO : your entity framework code for deleting the employee details
            StartWithMVCEntities db = new StartWithMVCEntities();
            Employee objEmp = db.Employees.ToList().Find(m => m.EmpId == recordID);
            db.Employees.DeleteObject(objEmp);
            db.SaveChanges();
            return RedirectToAction("ViewAllRecords");
        }    

如你所见,在 MVC 模式中从数据库删除记录非常简单。

在这里,我们删除记录后,就将请求重新路由到显示所有记录的方法。

结论

在这些文章(第 1 部分和第 2 部分)中,我们看到了如何在 MVC 中使用 Entity to Sql 添加新记录、查看、更新和删除记录。现在,运行你的项目并按照步骤操作:

>> 添加新记录。

>> 转到“查看所有记录”页面。

>> 点击编辑链接

>> 进行更改并保存。

>> 点击删除链接

>> 重新加载的视图将包含更新后的数据。

所以,这是在 MVC 中保存、编辑、更新记录的最简单方法。

关注点

MVC 提供了一种全新的编码模式,可以重用单个控制器下的视图。在 MVC 中,只需很少的努力,你就可以管理任何大型应用程序。MVC 中最好的地方在于,你可以专注于你的部分(或你的职责),而不会影响他人。

在 MVC 中,只有必需的 HTML 部分才会反射到客户端,因此它比其他方法更快。

所以,当你处理大型项目时,它总是很有用的。

即将推出

下一步?下一篇文章将介绍 MVC with Ajax

希望这对你有帮助。欢迎提出所有疑问和建议!:)

© . All rights reserved.