ASP.NET MVC – 操作
ASP.NET MVC – 操作
ASP.NET MVC Action Methods 负责执行请求并生成响应。默认情况下,它以 ActionResult 的形式生成响应。操作通常与用户交互具有一对一的映射关系。
例如,在浏览器中输入 URL,单击任何特定链接,然后提交表单等。这些用户交互中的每一个都会导致向服务器发送请求。在每种情况下,请求的 URL 都包含 MVC 框架用来调用操作方法的信息。action 方法的一个限制是它们必须是实例方法,所以它们不能是静态方法。也没有返回值限制。所以你可以返回字符串、整数等。
请求处理
动作是 MVC 应用程序中的最终请求目的地,它使用控制器基类。我们来看看请求处理。
-
当 URL 到达时,例如 /Home/index,UrlRoutingModule 会检查并了解路由表中配置的某些内容知道如何处理该 URL。
-
UrlRoutingModule 将我们在路由表中配置的信息放在一起,并将控制权移交给 MVC 路由处理程序。
-
MVC 路由处理程序将控制器传递给 MvcHandler,它是一个 HTTP 处理程序。
-
MvcHandler 使用控制器工厂来实例化控制器,它知道要实例化哪个控制器,因为它会在 RouteData 中查找该控制器值。
-
一旦 MvcHandler 有了控制器,MvcHandler 唯一知道的是 IController 接口,所以它只是告诉控制器执行。
-
当它告诉控制器执行时,它派生自 MVC 的控制器基类。Execute 方法创建一个动作调用程序并告诉该动作调用程序去寻找要调用的方法,找到要调用的动作。
-
动作调用程序再次查看 RouteData 并找到从路由引擎传递过来的动作参数。
行动类型
动作基本上返回不同类型的动作结果。ActionResult 类是所有操作结果的基础。以下是不同类型的操作结果及其行为的列表。
Sr.No. | 名称和行为 |
---|---|
1 |
ContentResult 返回一个字符串 |
2 |
FileContentResult 返回文件内容 |
3 |
FilePathResult 返回文件内容 |
4 |
FileStreamResult 返回文件内容 |
5 |
EmptyResult 什么都不返回 |
6 |
JavaScriptResult 返回执行脚本 |
7 |
JsonResult 返回 JSON 格式的数据 |
8 |
RedirectToResult 重定向到指定的 URL |
9 |
HttpUnauthorizedResult 返回 403 HTTP 状态码 |
10 |
RedirectToRouteResult 重定向到不同的动作/不同的控制器动作 |
11 |
ViewResult 作为视图引擎的响应接收 |
12 |
PartialViewResult 作为视图引擎的响应接收 |
让我们看一下上一章中创建的 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 – 右键单击 Controllers 文件夹并选择添加 → 控制器。
它将显示“添加脚手架”对话框。
第 2 步– 选择 MVC 5 控制器 – 空选项,然后单击“添加”按钮。
将出现添加控制器对话框。
第 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 步– 在我们上面创建的 Customer 控制器中添加以下代码。
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