添加控制器 (C#)

作者 :Rick Anderson

注意

此处提供了本教程的更新版本,它使用 ASP.NET MVC 5 和 Visual Studio 2013。 它更安全,更易于遵循,并演示了更多功能。

本教程将介绍如何使用 Microsoft Visual Web Developer 2010 Express Service Pack 1(Microsoft Visual Studio 的免费版本)生成 ASP.NET MVC Web 应用程序。 在开始之前,请确保已安装下面列出的必备组件。 可以通过单击以下链接安装所有这些应用程序: Web 平台安装程序。 或者,可以使用以下链接单独安装必备组件:

如果使用 Visual Studio 2010 而不是 Visual Web Developer 2010,请单击以下链接安装必备 组件:Visual Studio 2010 先决条件

本主题随附了一个带有 C# 源代码的 Visual Web 开发人员项目。 下载 C# 版本。 如果首选 Visual Basic,请切换到本教程的 Visual Basic 版本

MVC 代表 model-view-controller。 MVC 是一种用于开发架构良好且易于维护的应用程序的模式。 基于 MVC 的应用程序包含:

  • 控制器:处理传入应用程序的请求、检索模型数据,然后指定向客户端返回响应的视图模板的类。
  • 模型:表示应用程序数据并使用验证逻辑为该数据强制实施业务规则的类。
  • 视图:应用程序用于动态生成 HTML 响应的模板文件。

我们将在本教程系列中介绍所有这些概念,并演示如何使用它们来生成应用程序。

让我们从创建控制器类开始。 在“解决方案资源管理器”中,右键单击“控制器”文件夹,然后选择“添加控制器”。

显示“解决方案资源管理器”窗口的屏幕截图。在“控制器”右键单击菜单中选择了“添加”。在子菜单中选择“控制器”。

将新控制器命名为“HelloWorldController”。 将默认模板保留为 空控制器 ,然后单击“ 添加”。

AddHelloWorldController

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

显示“Hello World控制器点”选项卡和“解决方案资源管理器”窗口的屏幕截图。Hello World控制器文件夹中选择了“控制器点 c”。

在 块内 public class HelloWorldController ,创建两个类似于以下代码的方法。 控制器将返回 HTML 字符串作为示例。

using System.Web;
using System.Web.Mvc; 
 
namespace MvcMovie.Controllers 
{ 
    public class HelloWorldController : Controller 
    { 
        // 
        // GET: /HelloWorld/ 
 
        public string Index() 
        { 
            return "This is my <b>default</b> action..."; 
        } 
 
        // 
        // GET: /HelloWorld/Welcome/ 
 
        public string Welcome() 
        { 
            return "This is the Welcome action method..."; 
        } 
    } 
}

控制器命名 HelloWorldController 为 ,上面的第一个方法名为 Index。 让我们从浏览器调用它。 (按 F5 或 Ctrl+F5) 运行应用程序。 在浏览器中,将“HelloWorld”追加到地址栏中的路径。 (例如,在下图中,它 http://localhost:43246/HelloWorld.) 浏览器中的页面将如以下屏幕截图所示。 在上述方法中,代码直接返回了一个字符串。 你告诉系统只返回一些 HTML,它做到了!

显示浏览器的屏幕截图。这是我的默认操作是窗口中的文本。

ASP.NET MVC 根据传入 URL 调用不同的控制器类 (,并在其中调用不同的操作方法) 。 ASP.NET MVC 使用的默认映射逻辑使用如下格式来确定要调用的代码:

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

URL 的第一部分确定要执行的控制器类。 因此 /HelloWorld 映射到 HelloWorldController 类。 URL 的第二部分确定要执行的类上的操作方法。 因此 ,/HelloWorld/Index 将导致 Index 执行 类的 HelloWorldController 方法。 请注意,我们只需要浏览到 /HelloWorldIndex 并且默认使用 方法。 这是因为未显式指定名为 的方法 Index 是将在控制器上调用的默认方法。

浏览到 http://localhost:xxxx/HelloWorld/WelcomeWelcome 方法运行并返回字符串“这是 Welcome 操作方法...”。 默认 MVC 映射为 /[Controller]/[ActionName]/[Parameters]。 对于此 URL,采用 HelloWorld 控制器和 Welcome 操作方法。 目前尚未使用 URL 的 [Parameters] 部分。

显示浏览器的屏幕截图。这是欢迎操作方法是窗口中的文本。

让我们稍微修改示例,以便可以将一些参数信息从 URL 传递到控制器 (例如 /HelloWorld/Welcome?name=Scott&numtimes=4) 。 Welcome更改方法以包含两个参数,如下所示。 请注意,该代码使用 C# 可选参数功能来指示如果未为该参数传递任何值, numTimes 则参数应默认为 1。

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

运行应用程序并浏览到示例 URL (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4)。 可在 URL 中对 namenumtimes 使用其他值。 系统会自动将命名参数从地址栏中的查询字符串映射到方法中的参数。

显示浏览器的屏幕截图。Hello Scott Num Times is 4 is the text in the window.

在这两个示例中,控制器一直在执行 MVC 的“VC”部分,即视图和控制器工作。 控制器将直接返回 HTML。 通常,你不希望控制器直接返回 HTML,因为这会变得非常繁琐的代码。 相反,我们通常使用单独的视图模板文件来帮助生成 HTML 响应。 接下来让我们看看如何执行此操作。