- ASP.NET MVC 教程
- ASP.NET MVC - 主页
- ASP.NET MVC - 概述
- ASP.NET MVC - 模式
- ASP.NET MVC - 环境设置
- ASP.NET MVC - 入门
- ASP.NET MVC - 生命周期
- ASP.NET MVC - 路由
- ASP.NET MVC - 控制器
- ASP.NET MVC - 操作
- ASP.NET MVC - 过滤器
- ASP.NET MVC - 选择器
- ASP.NET MVC - 视图
- ASP.NET MVC - 数据模型
- ASP.NET MVC - 帮助程序
- ASP.NET MVC - 模型绑定
- ASP.NET MVC - 数据库
- ASP.NET MVC - 验证
- ASP.NET MVC - 安全
- ASP.NET MVC - 缓存
- ASP.NET MVC - 剃刀
- ASP.NET MVC - 数据注释
- Nuget包管理
- ASP.NET MVC - Web API
- ASP.NET MVC - 脚手架
- ASP.NET MVC - 引导程序
- ASP.NET MVC - 单元测试
- ASP.NET MVC - 部署
- ASP.NET MVC - 自托管
- ASP.NET MVC 有用资源
- ASP.NET MVC - 快速指南
- ASP.NET MVC - 有用的资源
- ASP.NET MVC - 讨论
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 中打开以进行编辑。
同样,再添加一个名为 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