ASP.NET MVC - 操作


ASP.NET MVC 操作方法负责执行请求并生成对其的响应。默认情况下,它会生成 ActionResult 形式的响应。操作通常与用户交互具有一对一的映射。

例如,在浏览器中输入 URL、单击任何特定链接并提交表单等。这些用户交互中的每一个都会导致将请求发送到服务器。在每种情况下,请求的 URL 都包含 MVC 框架用于调用操作方法的信息。对操作方法的一个限制是它们必须是实例方法,因此它们不能是静态方法。而且没有返回值限制。所以你可以返回字符串、整数等。

请求处理

操作是 MVC 应用程序中的最终请求目的地,它使用控制器基类。让我们看一下请求处理。

  • 当 URL 到达时,例如 /Home/index,UrlRoutingModule 会检查并了解路由表中配置的内容是否知道如何处理该 URL。

请求处理
  • UrlRoutingModule 将我们在路由表中配置的信息放在一起,并将控制权移交给 MVC 路由处理程序。

  • MVC 路由处理程序将控制器传递给 MvcHandler,它是一个 HTTP 处理程序。

  • MvcHandler 使用控制器工厂来实例化控制器,并且它知道要实例化哪个控制器,因为它在 RouteData 中查找该控制器值。

  • 一旦MvcHandler有了控制器,MvcHandler唯一知道的就是IController接口,所以它只是告诉控制器执行。

  • 当它告诉控制器执行时,它是从 MVC 的控制器基类派生的。Execute 方法创建一个操作调用程序,并告诉该操作调用程序去查找要调用的方法,找到要调用的操作。

  • 操作调用程序再次查看 RouteData 并找到从路由引擎传递的操作参数。

行动类型

操作基本上返回不同类型的操作结果。ActionResult 类是所有操作结果的基础。以下是不同类型的操作结果及其Behave的列表。

先生。 姓名和Behave
1

内容结果

返回一个字符串

2

文件内容结果

返回文件内容

3

文件路径结果

返回文件内容

4

文件流结果

返回文件内容

5

空结果

不返回任何内容

6

JavaScript结果

返回执行脚本

7

Json结果

返回 JSON 格式的数据

8

重定向到结果

重定向到指定的 URL

9

Http未授权结果

返回 403 HTTP 状态代码

10

重定向到路由结果

重定向到不同的操作/不同的控制器操作

11

查看结果

作为视图引擎的响应收到

12

部分查看结果

作为视图引擎的响应收到

让我们看一下上一章中的一个简单示例,其中我们创建了一个 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);
      }
   }
}

当您请求以下 URL http://localhost:61465/Employee/Mark时,您将收到以下输出作为操作。

本地主机员工标记输出

添加控制器

让我们添加另一个控制器。

步骤 1 - 右键单击​​控制器文件夹并选择添加 → 控制器。

添加另一个控制器

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

添加脚手架对话框

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

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

客户控制器

步骤 3 - 将名称设置为 CustomerController 并单击“添加”按钮。

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

set_name 客户控制器

同样,再添加一个名为 HomeController 的控制器。以下是 HomeController.cs 类的实现。

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

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

namespace MVCControllerDemo.Controllers {
   public class HomeController : Controller{
      // GET: Home
      public string Index(){
         return "This is Home Controller";
      }
   }
}

步骤 4 - 运行此应用程序,您将收到以下输出。

家庭控制器输出

步骤 5 - 在我们上面创建的客户控制器中添加以下代码。

public string GetAllCustomers(){
   return @"<ul>
      <li>Ali Raza</li>
      <li>Mark Upston</li>
      <li>Allan Bommer</li>
      <li>Greg Jerry</li>
   </ul>";
}

步骤 6 - 运行此应用程序并请求http://localhost:61465/Customer/GetAllCustomers。您将看到以下输出。

本地主机获取所有客户

您还可以重定向到同一控制器甚至不同控制器的操作。

以下是一个简单的示例,我们将通过使用以下代码更改 HomeController 中的代码来从 HomeController 重定向到 Customer Controller。

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

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

namespace MVCControllerDemo.Controllers{
   public class HomeController : Controller{
      // GET: Home
      public ActionResult Index(){
         return RedirectToAction("GetAllCustomers","Customer");
      }
   }
}

正如您所看到的,我们使用了 RedirectToAction() 方法 ActionResult,它采用两个参数:操作名称和控制器名称。

当您运行此应用程序时,您将看到默认路由将其重定向到 /Customer/GetAllCustomers

本地主机客户 GetAllCustomers