ASP.NET MVC操作方法负责执行请求并生成对它的响应.默认情况下,它以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 重定向到指定的网址 |
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/员工/标记,然后您将收到以下输出作为操作.
让我们添加另一个控制器.
步骤1 : 右键单击Controllers文件夹,然后选择Add → 控制器.
它将显示Add脚手架对话框.
步骤2 : 选择MVC 5 Controller - Empty选项并单击"Add"按钮.
将出现Add Controller对话框.
第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