【译】ASP.NET MVC 5 教程 - 2:添加控制器

原文:【译】ASP.NET MVC 5 教程 - 2:添加控制器

MVC 表示 模型-视图-控制器。MVC 是一种用于开发应用程序的模式,具备良好架构,可测试和易于维护。基于 MVC 应用程序中包含:

  • Models: 表示应用程序的数据,并使用验证逻辑强制执行业务规则的数据的类。
  • Views: 您的应用程序用来动态生成 HTML 响应的模板文件。
  • Controllers: 处理传入的请求的浏览器,类检索模型的数据,然后指定将响应返回到浏览器中的视图模板。

在这个系列教程中涵盖了所有这些概念和教你怎么使用它们构建应用程序。

让我们开始创建一个控制器类。在 解决方案资源管理器中,右键单击 Controllers 文件夹,然后单击 添加,然后支架。

 

添加支架对话框中,单击MVC 5 控制器-空,然后单击添加

 

注意在 解决方案资源管理器 已创建的新文件命名 HelloWorldController.cs。在 IDE 中打开该文件。

 

写入下面的代码:

 1 using System.Web;
 2 using System.Web.Mvc;
 3
 4 namespace MvcMovie.Controllers
 5 {
 6     public class HelloWorldController : Controller
 7     {
 8         //
 9         // GET: /HelloWorld/
10
11         public string Index()
12         {
13             return "This is my <b>default</b> action...";
14         }
15
16         //
17         // GET: /HelloWorld/Welcome/
18
19         public string Welcome()
20         {
21             return "This is the Welcome action method...";
22         }
23     }
24 }

示例中,控制器的类名为 HelloWorldController,继承于:Controller,上述第一种方法为 Index。让我们从浏览器中调用它。运行该应用程序 (按 F5 或 Ctrl + F5)。在浏览器中,将"HelloWorld"添加到地址栏上的路径后面 。(例如,在图中,它下面的 http://localhost:1234/HelloWorld.)页面在浏览器中的将看到如下图所示的页面。在上述方法中,代码直接返回一个字符串。

 

ASP.NET MVC 会根据传入的 URL 调用不同的控制器类 (以及其中的不同操作方法)。ASP.NET MVC 所使用的默认 URL 路由逻辑使用这样的格式来确定哪些代码来调用:

/[Controller]/[ActionName]/[Parameters]

App_Start/RouteConfig.cs文件中可以设置路由的格式。

 1 public static void RegisterRoutes(RouteCollection routes)
 2 {
 3     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 4
 5
 6
 7
 8     routes.MapRoute(
 9         name: "Default",
10         url: "{controller}/{action}/{id}",
11         defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
12     );
13 }

当您运行该应用程序并不提供任何 URL 部分时,它将默认的"Home"的控制器和上面代码的默认值部分中指定的"Index"的操作方法。

URL 的第一部分确定要执行的控制器类。所以 /HelloWorld 映射到 HelloWorldController 类。第二部分 URL 的确定要执行的类上的操作方法。所以 /HelloWorld/Index 会找到 HelloWorldController 类的 Index 的方法执行。请注意,我们只在浏览器中看到 /HelloWorld,而并无 Index 。这是因为命名 Index 的方法被指定一个称为控制器的默认方法。URL 段 ( Parameters) 的第三部分是用于路由数据。我们将在本教程中稍后看到路由配置的资料。

下面在浏览中打开 http://localhost:xxxx/HelloWorld/Welcome。 Welcome 方法运行,并返回字符串"This is my default action..."。MVC 的默认映射是 /[Controller]/[ActionName]/[Parameters]。对于这个 URL,控制器是 HelloWorld,而 Welcome 是操作方法。您还没有使用 URL 的 [Parameters] 部分。

 

让我们将此示例稍微修改一下,以便您可以将一些参数信息从 URL 中传递给控制器 (例如, /HelloWorld/Welcome?name=Scott&numtimes=4)。更改您 Welcome 方法,包括两个参数,如下所示。请注意,该代码使用 C# 的可选参数功能来指示:当没有为 numTimes 参数传递值时,该参数的默认值应为 1。

1 public string Welcome(string name, int numTimes = 1) {
2      return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
3 }

运行您的应用程序,然后在浏览中打开 URL (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4)。在 URL 中您可以尝试不同的值 name 和 numtimes 。在ASP.NET MVC 模型绑定系统 从地址栏中命名的参数将自动映射给您的方法中指定的参数。

 

在上面的示例中,不使用 URL 段 ( Parameters),作为查询字符串传递的name numTimes 参数。

Welcome方法替换为以下代码:

1 public string Welcome(string name, int ID = 1)
2 {
3     return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
4 }

运行应用程序,然后输入以下 URL: http://localhost:xxx/HelloWorld/Welcome/3?name=Rick

 

这次 URL 的第三个部分匹配ID,因为Welcome 的操作方法有一个匹配的 URL 规范在RegisterRoutes 方法中的参数 (ID)。

 1 public static void RegisterRoutes(RouteCollection routes)
 2 {
 3     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 4
 5
 6
 7
 8     routes.MapRoute(
 9         name: "Default",
10         url: "{controller}/{action}/{id}",
11         defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
12     );
13 }

在 ASP.NET MVC 应用程序中,这是默认的路由配置 (像刚才那样用 ID)。您也可以添加一个路由,这两个name传递给 和 numtimes 作为路由数据的 URL 中的参数。在App_Start\RouteConfig.cs文件中,添加"Hello"的路由配置:

 1 public class RouteConfig
 2 {
 3    public static void RegisterRoutes(RouteCollection routes)
 4    {
 5       routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 6
 7
 8
 9
10       routes.MapRoute(
11           name: "Default",
12           url: "{controller}/{action}/{id}",
13           defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
14       );
15
16
17
18
19       routes.MapRoute(
20            name: "Hello",
21            url: "{controller}/{action}/{name}/{id}"
22        );
23    }
24 }

在浏览器中打开 /localhost:XXX/HelloWorld/Welcome/Scott/3.

 

对于许多的 MVC 应用程序都默认路由来正常工作。稍后在本教程中,通过使用模型程序,数据,您将了解到,所以一般不必修改默认路由。

时间: 2024-09-20 05:47:34

【译】ASP.NET MVC 5 教程 - 2:添加控制器的相关文章

【译】ASP.NET MVC 5 教程 - 10:添加验证

原文:[译]ASP.NET MVC 5 教程 - 10:添加验证 在本节中,我们将为Movie模型添加验证逻辑,并确认验证规则在用户试图使用程序创建和编辑电影时有效. DRY 原则 ASP.NET MVC 的一个核心原则是DRY(Don't Repeat Yourself - 不做重复的事情).ASP.NET MVC 鼓励你一次性的指定功能或行为,然后应用程序的其它地方通过映射得到它,这样一来就减少了大量的代码,从而减少了出错误的可能性,并且更易于维护. ASP.NET  MVC  和 Enti

【译】ASP.NET MVC 5 教程 - 3:添加视图

原文:[译]ASP.NET MVC 5 教程 - 3:添加视图 在本节内容中,我们将修改HelloWorldController类,使用视图模板来干净利索的封装生成HTML响应客户端的过程. 您将创建一个使用Razor 视图引擎的视图模板文件..cshtml扩展名的文件都是基于 razor 视图模板文件,Razor 视图引擎将编写视图模板所需的代码降至最低. 目前的 Index 方法返回一条消息,是在控制器类中直接写入的字符串.更改 Index 方法使其返回一个View对象,如以下代码所示: 1

【译】ASP.NET MVC 5 教程 - 9:添加新字段

原文:[译]ASP.NET MVC 5 教程 - 9:添加新字段 在本节中,我们将使用Entity Framework Code First 数据迁移功能将模型类的改变应用到数据库中. 默认情况下,当我们使用Entity Framework Code First 自动创建一个数据库,像我们之前教程中讲的那样,Code First 添加一个table帮我们跟踪数据库结构是否与模型类同步.如果不同步,Entity Framework 将抛出一个错误,这样更方便我们在开发的时候发现问题,否则只能在运行

【译】ASP.NET MVC 5 教程 - 4:添加模型

原文:[译]ASP.NET MVC 5 教程 - 4:添加模型 在本节中,我们将添加一些管理电影数据库的类,这些类在ASP.NET MVC 应用程序中扮演"Model"的角色. 我们将使用.NET Framework平台上熟知的Entity Framework 数据访问技术来定义和使用这些模型.Entity Framework(简称EF)提供了一种叫做Code First 的开发范例.Code First 允许你写一些简单的类来创建模型(这些通常被称为POCO类,即"plai

【译】ASP.NET MVC 5 教程 - 11:Details 和 Delete 方法详解

原文:[译]ASP.NET MVC 5 教程 - 11:Details 和 Delete 方法详解 在教程的这一部分,我们将研究一下自动生成的 Details 和Delete 方法. Details 方法 打开Movie控制器,找到Details方法. // // GET: /Movies/Details/5 public ActionResult Details(Int32 id) { Movie movie = db.Movies.Find(id); if (movie == null) {

【译】ASP.NET MVC 5 教程 - 6:通过控制器访问模型的数据

原文:[译]ASP.NET MVC 5 教程 - 6:通过控制器访问模型的数据 在本节中,你将新建一个MoviesController 类,并编写获取电影数据的代码,使用视图模板将数据展示在浏览器中. 在进行下一步之前,你需要先编译应用程序,否则在添加控制器的时候会出错. 在解决方法资源管理器的Controllers文件夹右键,选择"添加">"支架": 在"添加支架"对话框,选择 MVC 5 Controller with read/wri

【译】ASP.NET MVC 5 教程 - 8:搜索查询

原文:[译]ASP.NET MVC 5 教程 - 8:搜索查询 添加一个搜索的方法和搜索的视图 在本节中,我们为 Index 方法添加查询功能,使我们能够根据电影的题材或名称进行查找. 修改 Index 表单 首先,我们需要更新 MoviesController 的 Index 方法,代码如下: public ActionResult Index(string searchString) { var movies = from m in db.Movies select m; if (!Stri

【译】ASP.NET MVC 5 教程 - 5:使用 SQL 服务器 LocalDB 创建连接字符串

原文:[译]ASP.NET MVC 5 教程 - 5:使用 SQL 服务器 LocalDB 创建连接字符串 在上一节中,我们创建了MovieDBContext 类来连接数据库.处理Movie 对象和数据库记录的映射.你可能会问我们到底使用了哪个数据库?其实,在我们没有指定数据库的时候,Entity Framework 默认使用LocalDB .在本节中我们将介绍如何在Web.config 文件中添加一个数据库连接. SQL Server Express LocalDB LocalDB 是SQL

ASP.NET MVC 5 学习教程:添加控制器

原文 ASP.NET MVC 5 学习教程:添加控制器 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控制器访问模型的数据 生成的代码详解 使用 SQL Server LocalDB Edit方法和Edit视图详解 添加查询 Entity Framework 数据迁移之添加字段 添加验证 Details 和 Delete 方法详解 MVC代表了模型-视图-控制器.MVC是一个架构良好,可测试性和易于