- 下载PDF_Article.zip - 5.4 MB
- 下载SqlScriptToCreateTable.zip - 659 B
- 下载SqlScriptToCreateDatabase.zip - 1,000 B
- 下载LearningMVC.zip - 2.3 MB
介绍 在本系列教程的第一部分中,我们大致了解了MVC。在本部分中,我们将重点介绍MVC模式的实际实现。我不需要解释MVC的理论,因为我们已经在上一篇文章中讨论过了。 我们的Roadmap 我们的议程如下: Part1:介绍MVC架构和关注点分离又是;第2部分:创建MVC应用程序从头开始使用LINQ to SQL并连接数据库只第3部分:连接MVC应用程序的帮助下EntityFramework DB-First方法。第4部分:连接MVC应用程序的帮助下EntityFramework优先方法只第5部分:实现存储库模式与EntityFramework MVC应用程序只第6部分:实现一个通用的库模式和单元的工作模式与EntityFramework MVC应用程序只 涉及的主题 从头创建一个MVC项目。添加控制器、视图和模型。创建示例数据库并使用LINQ to SQL进行通信。使用LINQ to SQL在MVC应用程序中执行CRUD操作。理解ViewData, ViewBag和TempData。通过System.Component.DataAnnotation进行模型验证。 1. 创建MVC项目 步骤1:打开Visual Studio 2010/2013(我使用的是2010)。去文件=比;新=比;项目并选择ASP。NET MVC3 Web应用程序,如下图所示: 将应用程序命名为LearningMVC。 第2步:打开一个项目模板选择窗口,在其中选择Empty。选择View Engine as Razor和按下OK。 步骤3:现在我们的解决方案已经准备好,其中包含一个空的MVC应用程序。 我们可以清楚地看到,与传统的ASP相比,这个解决方案包含了一些额外的文件夹。净的web应用程序。 我们得到模型,视图控制器,和视图文件夹中的共享文件夹。这些文件夹保存着它们各自的MVC播放器模型-视图-控制器。视图中的共享文件夹包含_Layout。cshtml,它可以用作我们创建的视图的母版页。 我们看到了全球化。包含默认路由表的asax文件,该表定义当请求到来时要遵循的路由。它说当请求到达主控制器时,必须调用该主控制器的Index动作。 动作是控制器中定义的方法(可以称为定义路由)。操作方法也可以包含上面图中的参数。它说主控制器有一个动作索引,其中包含一个可选参数ID。 当我们运行我们的应用程序,我们得到如下所示: 上面说我们正在寻找的资源找不到。默认情况下,请求遵循global中提到的默认路由。asax,即进入控制器的主控制器并调用方法索引。因为我们还没有这些,浏览器显示这个错误。 没关系,让浏览器高兴起来吧。 2. 添加控制器、视图和模型 步骤1:通过右键单击Controllers文件夹创建一个My Controller,并添加一个名为My的控制器。添加带有空读/写操作的控制器,它将给我们一个具有很少默认生成操作的类。 注意,每个动作名有两个动作,一个是Get,即当视图第一次加载时,第二个是POST,当视图提交一些数据时。 全球变化。asax RegisterRoutes方法: 隐藏,复制Code
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "My", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
注意:我们已经根据添加的控制器更改了控制器的名称。 步骤2:我们可以看到,我们有动作,但它们返回一个视图,所以我们需要为它们创建视图。但在此之前,我们将为视图创建一个名为User的模型。右键单击Model文件夹,添加一个名为User的类。 添加以下属性到用户类: 现在我们的模型已经创建,我们可以创建与这个特定模型绑定的视图。 步骤3:转到控制器,右键单击控制器的空操作,从上下文菜单中选择顶部的AddView。默认情况下,视图名称与动作名称相同。 例如详情, 选择Viewname作为详细信息,模型类作为用户,脚手架模板作为详细信息。此模板指定视图的角色。这个视图将显示用户(实体)的详细信息。单击add。 同样地,为所有操作执行此操作,并创建视图。 注意,视图会自动添加到My文件夹下的Views文件夹中(根据控制器的名称自动创建)。这是为MVC维护一个特殊的结构,这样我们就不必为维护它而增加开销。 现在我们有控制器和视图,如果我们运行应用程序,我们得到。 例如,我的控制器的索引操作被触发,返回索引视图。 3.创建示例数据库并使用LINQ to SQL进行通信。 我们的MVC应用程序已经准备好了,但是我没有显示虚拟数据,而是运行应用程序与数据库对话,以便我们可以涵盖应用程序的更广泛方面。 步骤1:创建一个数据库,脚本是在附件,就执行它在SQL Server 2005/2008。 步骤2:将新条目添加到解决方案,并选择LINQ to SQL类,称之为MyDB.dbml。 , 我们的解决方案看起来像: , 第三步:打开Server explorer的Visual Studio,打开一个连接,通过提供服务器名称和现有的数据库名称在Server explorer打开连接窗口。 , 单击OK。我们的解决方案看起来像: 步骤4:将用户表DBML设计师窗口,我们得到类图格式的表设计器窗口。 , 当我们打开MyDB.designer.cs,我们得到MyDBDataContext类。这个类包含数据库用户表信息形式的类和属性。表的每一列,属性创建的类,我们可以使用这些属性来/从数据库获取/设置值。 4. 在MVC应用程序中使用LINQ to SQL执行CRUD操作 我们现在有一个数据库,一个上下文类与数据库和一个MVC应用程序执行CRUD操作在数据库使用上下文类。 步骤1读 去指数行动,使上下文类的一个实例。我们可以得到所有的表名和列名,上下文的实例。做一个查询来显示所有的记录索引视图。填充我们先前创建的用户模型,并将其传递给Index视图(索引视图将列表类型的项模板)。 , 当我们运行应用程序时,我们得到一个空列表,即我们没有记录在数据库中。 , 第2步创建 首先编写代码来创建一个用户。实例的行动创造,总是将返回一个空视图只; 当我们发布一些数据点击提交后创建然后我们需要一个数据输入表中创建一个新用户只;当形式发布,它触发一个Post操作创建的已经绑定用户模型视图字段属性。我们将检索这些模型属性并使上下文类的一个实例填充上下文用户和提交到数据库。 重定向行动指数,现在记录将显示在索引视图。我们已经成功地创建了一个用户。 ,在数据库: , 步骤3更新 第四步删除 现在我们可以执行的更新和删除自己,下面是更新和删除的屏幕。 编辑代码: 得到: , 职位: 获得行动的编辑: 编辑几个领域: , 反映在数据库更新: , 代码显示一个特定用户的细节: , 细节屏幕: , 注意:细节行动没有发布一个,作为控制器的任何职位。 同样,删除: 屏幕: , 在删除后返回列表: , 删除后在数据库: , 是的,所有的CRUD操作完成。现在我们知道MVC。 有一些基本的场景,我想讨论之前完成第一部分,像传递数据从控制器到视图、控制器等与模型验证。 5. 理解视讯系统,ViewBag TempData 我想把这个话题是关于这三名球员有很多混淆。 MVC提供了我们视讯系统,ViewBag TempData传递数据的控制器,视图和下一个请求。显示数据和ViewBag在某种程度上相似但TempData执行额外的角色。让我们重点对这三名球员: ViewBag,显示数据 我写了样例测试代码在同一个应用程序中,我们从一开始后, 填充显示数据和ViewBag指数行动我的控制器 获取显示数据/ ViewBag代码视图 当运行应用程序时,我们会在屏幕上 , 以下是角色和显示数据和ViewBag之间的相似之处: 维护数据从控制器,视图。将数据从控制器传递给各自的观点。他们发生任何重定向时,变成了空值,因为他们的角色是提供控制器和视图之间进行通信的一种方式。这是一个在服务器调用通信机制。 显示数据和ViewBag之间的差异(从一个博客): 显示数据字典的对象是来自ViewDataDictionary类和使用字符串作为键访问。ViewBag是一个动态的性质,利用c# 4.0的新的动态特性。视讯系统需要铸字复杂数据类型和检查null值,以避免错误。ViewBag不需要铸字为复杂数据类型。 TempData TempData字典来自TempDataDictionary类并存储在短生活会话。它是一个字符串键和对象值。 保持信息的HTTP请求的时间。这意味着只有从一个页面到另一个地方。它有助于维护数据,当我们从一个到另一个控制器或从一个动作到其他行动。换句话说,当我们重定向Tempdata有助于维护数据之间的重定向。它在内部使用会话变量。临时数据使用在当前和随后的请求只意味着我们确信nex时使用t请求将被重定向到下一个视图。它需要铸字为复杂数据类型和检查null值,以避免错误。通常只是用于存储一次消息像错误消息,验证消息。 我添加了一个TempData在编辑操作: 隐藏,复制Code
[HttpPost]
public ActionResult Edit(int? id, User userDetails)
{
TempData["TempData Name"] = "Akhil";
…..
当视图重定向到索引的行动。 , 即得到TempData值在行动。 6.模型验证 我们可以有很多方法实现验证Web应用程序客户端,服务器端等等…… 但MVC提供了我们一个特性,我们可以标注模型验证通过编写一个/两行代码。 隐藏,复制Code
public int UserId { get; set; }
[Required(ErrorMessage = "FirstName is required")]
public string FirstName { get; set; }
public string LastName { get; set; }
………..
当我们运行应用程序,并试图编辑/创建用户不指定FirstName, 惊讶! ?是的模型验证本身用这些注释。有很多类似必需字段验证器,我使用。 不要忘记包括使用System.ComponentModel.DataAnnotations;名称空间,当使用模式验证。这是把类的名称空间用于验证。 Conclusion 现在我们知道MVC是什么,如何实现它,但是它的优点,在MVC CRUD操作。即将到来的部分教程将专注于更高级的主题,如EntityFramework,库模式,工作单元模式。第一种方法的代码。 编码:快乐), 本文转载于:http://www.diyabc.com/frontweb/news1917.html
学习MVC -第2部分:使用LINQ to SQL创建MVC应用程序和执行CRUD操作
原文地址:https://www.cnblogs.com/Dincat/p/13456639.html