ASP.NET MVC - 控制器

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

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

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

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

第1步 : 打开Visual Studio,然后单击File → 新的 → 项目菜单选项.

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

Visual Studio项目菜单

第2步 : 从左侧窗格中,选择Templates →  Visual C# → 网站.

第3步 : 在中间窗格中,选择"ASP.NET Web应用程序".

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

MVCControllerDemo

第5步 : 为了简单起见,选择Empty选项并选中'Add folders and core references for'部分中的MVC复选框,然后单击Ok.

它将创建一个基本的MVC项目,其中预定义最少内容.

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

因为我们从一个空的项目模板创建了ASP.Net MVC项目,所以目前该应用程序不包含任何要运行的东西.

第6步 : 右键单击解决方案资源管理器中的Controllers文件夹,添加EmployeeController.选择Add → 控制器.

EmployeeController

它将显示Add Scaffold对话框.

EmployeeController Scaffolding Dialog

第7步 : 选择MVC 5 Controller  -  Empty选项并单击"Add"按钮.

将出现Add Controller对话框.

MVC 5 Controller

步骤8 : 将名称设置为EmployeeController并单击"添加"按钮.

您将在Controllers文件夹中看到一个新的C#文件EmployeeController.cs,该文件在Visual Studio中也可以进行编辑./p> 自定义路线员工控制器

现在,在此应用程序中,我们将使用默认路由为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"公司雇员/马克".在这种情况下,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框架将查找与参数名称匹配的值.它将应用所有可能的组合来找出参数值.它将搜索Route数据,查询字符串等.

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

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

Localhost Employee Mark

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