015-控制器概述

      Controller(控制器)在ASP.NET MVC中负责控制所有客户端与服务器端的交互,并且负责协调Model与View之间的数据传递,是ASP.NET MVC整体运作的核心角色。

      ASP.NET MVC的核心就是控制器,它负责处理客户端(通常是浏览器)发送来的所有请求,并决定将什么内容响应给客户端。通过这种方式,控制器负责响应用户的输入,并且在响应时修改Model,把数据输出到相关的View。MVC架构中的控制器主要关注应用程序流入、输入数据的处理,以及提供向视图输出的数据。

1. 控制器结构

      Controller本身就是一个类(Class),其中有许多方法(Method),这些方法中只要是公开方法(public method)就会被视为是一个动作(Action),只要有动作存在,就可以通过该动作方法接收客户端传来的要求与决定响应的视图(View)。

      以下列程序代码为例,既可看出定义一个控制器所必备的一些特性。

using System.Web.Mvc;
namespace MvcApplication1.Controllers
{    
    public class Default1Controller : Controller    
    {        
        public ActionResult Index()  
       {
            ViewBag.Message = "修改此模板以快速启动你的ASP.NET MVC应用程序。";
            return View();
        }  
   }
}

      由上述程序得知,撰写控制器的基本要求如下。

(1)Controller必须为public。

(2)Controller名称必须以Controller结尾。

(3)必须继承自ASP.NET MVC内建的Controller类型,或继承IController的自定义类型。

(4)所有action必须为public,任何非公开的方法如声明为private或protected的方法都不会被视为一个action。

2. 控制器的运行过程

      当Controller被MvcHandler选中之后,下一步就是通过ActionInvoker选定适当的Action来运行。在Controller中的每一个Action可以定义0到多个参数,ActionInvoker会依据当下的RouteValue与客户端传来的数据,准备好传入Action参数。最后正式调用Controller中被选中的那个Action方法。

      参数传入的属性都是通过一种称为模型绑定(Model Binding)机制,从RequestContext取得数据,并将数据对应或传入方法的参数中,让Action不用再像之前ASP或ASP.NET Web Forms中经常使用的Request.Form或Request.QueryString等对象来取得客户端的数据。通过自定义的模型绑定,甚至可以让你对应除了Request.Form或Request.QueryString以外的数据来源,例如:HTTP Cookies、HTTP Headers,等等。

      Action运行完后的回传值通常是ActionResult类型或其衍射类型(Derived Classes)。事实上,ActionResult是一个抽象类,因此,ASP.NET MVC本身实现了许多不同类型ActionResult的子类别。例如常用的ViewResult用来回传一个View,RedirectResult用来将网页转向至其他网址,ContentResult回传一个文字属性、FileResult回传一个二进制的文档,等等,这些都是继承自ActionResult的类型,也都可以拿来当成Action回传类型。总之,Action回传的类型可以是ActionResult类型或其衍生类型,也可以直接使用.NET内建的基本数据类型(primitive types),如string或int等,以及void。

      MvcHandler从Controller得到ActionResult之后,就会开始运行ActionResult提供的ExecuteResult方法,并将运行结果响应到客户端,这时Controller的任务就算完成。

      以上是Controller大致的运行过程,不过,Controller在运行时还有一层所谓的动作过滤器(Action Filters)机制,分成以下四种类型。

  • 授权过滤器(Authorization Filters)
  • 动作过滤器(Action Filters)
  • 结果过滤器(Result Filters)
  • 例外过滤器(Exception Filters)

      因此,Controller的运行过程还必须考虑到动作过滤器的运行顺序。 

3.控制器模板

(1)空MVC控制器

(2)包含读/写操作控制器和视图的MVC控制器

(3)包含空的读/写操作的MVC控制器

(4)其他控制器 

posted @ 2015-10-13 16:39  RunningYY  阅读(492)  评论(0编辑  收藏  举报