ASP.NET MVC – 控制器

ASP.NET MVC – 控制器


控制器本质上是 ASP.NET MVC 应用程序的中心单元。它是第一个接收者,它与传入的 HTTP 请求交互。因此,控制器决定将选择哪个模型,然后在渲染该视图之后,从模型中获取数据并将其传递给相应的视图。实际上,控制器正在控制应用程序的整体流程,获取输入并呈现正确的输出。

控制器是从 System.Web.Mvc.Controller 继承的 C# 类,它是内置的控制器基类。控制器中的每个公共方法都称为操作方法,这意味着您可以通过某个 URL 从 Web 调用它来执行操作。

MVC 约定是将控制器放在 Visual Studio 在设置项目时创建的 Controllers 文件夹中。

让我们通过创建一个新的 ASP.Net MVC 项目来看看 Controller 的一个简单示例。

步骤 1 – 打开 Visual Studio 并单击文件 → 新建 → 项目菜单选项。

一个新的项目对话框打开。

Visual Studio 项目菜单

步骤 2 – 从左侧窗格中,选择模板 → Visual C# → Web。

步骤 3 – 在中间窗格中,选择 ASP.NET Web 应用程序。

第 4 步– 在名称字段中输入项目名称“MVCControllerDemo”,然后单击确定继续。您将看到以下对话框,要求您设置 ASP.NET 项目的初始内容。

MVCControllerDemo

第 5 步– 为简单起见,选择“空”选项并选中“添加文件夹和核心引用”部分中的 MVC 复选框,然后单击“确定”。

它将创建一个具有最少预定义内容的基本 MVC 项目。

一旦 Visual Studio 创建了项目,您将在解决方案资源管理器窗口中看到许多文件和文件夹。

由于我们已经从一个空的项目模板创建了 ASP.Net MVC 项目,所以目前,该应用程序不包含任何要运行的内容。

第 6 步– 通过右键单击解决方案资源管理器中的 Controllers 文件夹添加 EmployeeController。选择添加 → 控制器。

员工控制器

它将显示“添加脚手架”对话框。

EmployeeController 脚手架对话框

步骤 7 – 选择 MVC 5 Controller – Empty 选项,然后单击“添加”按钮。

将出现添加控制器对话框。

MVC 5 控制器

步骤 8 – 将名称设置为 EmployeeController 并单击“添加”按钮。

您将在 Controllers 文件夹中看到一个新的 C# 文件 EmployeeController.cs,该文件夹也已打开以在 Visual Studio 中进行编辑。

自定义路由员工控制器

现在,在这个应用程序中,我们将使用默认路由为 Employee 控制器添加一个自定义路由。

步骤 1 – 转到“App_Start”文件夹下的“RouteConfig.cs”文件并添加以下路由。

routes.MapRoute(
   "Employee", "Employee/{name}", new{
      controller = "Employee", action = "Search", name =
      UrlParameter.Optional });

以下是 RouteConfig.cs 文件的完整实现。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MVCControllerDemo {
   public class RouteConfig {
      public static void RegisterRoutes(RouteCollection routes){
         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
			
         routes.MapRoute(
            "Employee", "Employee/{name}", new{
               controller = "Employee", action = "Search", name = UrlParameter.Optional });
					
         routes.MapRoute(
            name: "Default", url: "{controller}/{action}/{id}", defaults: new{
               controller = "Home", action = "Index", id = UrlParameter.Optional });
      }
   }
}

考虑一个场景,其中任何用户都来搜索员工,并指定 URL“Employee/Mark”。在这种情况下,Mark 将被视为参数名称,而不是 Action 方法。所以在这种情况下,我们的默认路由不会显着工作。

为了在传递参数时从浏览器获取传入值,MVC 框架提供了一种简单的方法来解决这个问题。它是通过使用 Action 方法中的参数来实现的。

第 2 步– 使用以下代码更改 EmployeeController 类。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;

namespace MVCControllerDemo.Controllers  {
   public class EmployeeController : Controller {
      // GET: Employee
      public ActionResult Search(string name){
         var input = Server.HtmlEncode(name);
         return Content(input);
      }
   }
}

如果向操作方法添加参数,则 MVC 框架将查找与参数名称匹配的值。它将应用所有可能的组合来找出参数值。它将在路由数据、查询字符串等中进行搜索。

因此,如果您请求 /Employee/Mark”,那么 MVC 框架将决定我需要一个带有“UserInput”的参数,然后 Mark 将从 URL 中选取并自动传递。

Server.HtmlEncode 将简单地以纯文本形式转换任何类型的恶意脚本。当上述代码编译执行并请求以下 URL http://localhost:61465/Employee/Mark 时,您将得到以下输出。

本地主机员工标记

正如您在上面的屏幕截图中看到的,Mark 是从 URL 中选取的。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁