ASP.Net MVC动作

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

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

请求处理

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

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

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

  • MVC路由处理程序将控制器传递给作为HTTP处理程序的MvcHandler
  • MvcHandler使用一个控制器工厂实例化控制器,它知道实例化哪个控制器,因为它在该控制器值的RouteData中查找。
  • MvcHandler有一个控制器,MvcHandler唯一知道的就是IController接口,所以它只是告诉控制器执行。
  • 当它告诉控制器执行时,这是从MVC的控制器基类派生的。 Execute方法创建一个动作调用者,并告诉动作调用者去找到一个方法来调用,找到一个调用的动作。
  • 动作调用者再次在RouteData中查找并找到从路由引擎传递的动作参数。

动作类型

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

编号 名称 行为
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 作为视图引擎的响应收到

我们来看看前一章(ASP.Net MVC控件器MVCControllerDemo项目)中创建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:51066/Employee/Maxsu 时,将收到操作的输出如下 -

添加控制器

现在,在项目上再添加另一个控制器。

第1步 - 通过在解决方案资源管理器 中右键单击 Controllers 文件夹来添加一个:控制器:CustomerController。选择:添加 -> 控制器 。如下所示 -

它将显示“添加基架” 对话框。如下所示 -

第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 MVCControllerDemo.HomeController.Index() Action.";
        }
    }
}

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

第5步 - 在上面创建的CustomerController.cs类中添加一个方法,如以下代码 -

public string GetAllCustomers(){
   return @"<ul>
      <li>Max Su</li>
      <li>Mark Jasper</li>
      <li>Allan Java</li>
      <li>Ruby Jerry</li>
   </ul>";
}

第6步 - 运行该应用程序并请求URL: http://localhost:51066/Customer/GetAllCustomers ,将看到以下输出 -

也可以重定向到同一控制器的操作,甚至是不同的控制器。以下是一个简单的例子,将通过使用以下代码更改HomeController中的代码,从HomeController重定向到CustomerController

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()方法,它有两个参数:操作名称和控制器名称。

当运行这个应用程序时,会看到默认路由将重定向到/Customer/GetAllCustomers


上一篇: ASP.Net MVC控制器 下一篇: ASP.Net MVC过滤器