ASP.NET MVC - 动作

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

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

请求处理

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

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

Request Processing

  • 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

重定向到指定的网址

9

HttpUnauthorizedResult

返回403 HTTP状态代码

10

RedirectToRouteResult

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

11

ViewResult

作为视图引擎的响应收到

12

PartialViewResult

作为回复收到用于查看引擎

让我们看看前一章中的一个简单示例使用System创建了一个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);
      }
   }
}


当您请求以下网址时 http://localhost:61465/员工/标记,然后您将收到以下输出作为操作.

Localhost员工标记输出

添加控制器

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

步骤1 : 右键单击Controllers文件夹,然后选择Add → 控制器.

添加另一个控制器

它将显示Add脚手架对话框.

添加脚手架对话框

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

将出现Add Controller对话框.

CustomerController

第3步 : 将名称设置为CustomerController并单击"添加"按钮.

现在,您将在Controllers文件夹中看到一个新的C#文件"CustomerController.cs",该文件在Visual Studio中打开以进行编辑好吧.

set_name CustomerController

同样,再添加一个控制器名称为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步 : 运行此应用程序,您将收到以下输出.

Home Controller Output

第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 .你会看到以下输出.

Localhost 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

Localhost Customers GetAllCustomers