ASP.NET/C# 控制器Controller的深入理解
1.理解控制器
1.1控制器的角色
(1)中转作用:控制器通过前面的学习大家应该知道它是一个承上启下的作用,根据用户输入,执行响应行为(动作方法),同时在行为中调用模型的业务逻辑,返回给用户结果(视图)。
(2)中介角色:分离视图和模型,让视图和模型各司其职,控制器赋值二者交互。只负责数据传送,不负责处理。控制器的两种角色可以用下图来表示:
1.2深入理解控制器类
(1)观察控制器类的元数据。前面我们一直用控制器,在最初我们也简单说过控制器必须继承 Controller 类,那么Controller 类究竟还有哪些密码需要我们进一步研究呢。其实我们通过查看 Controller 类的元数据,就能够发现,如下图所示:
(2)ControllerBase 类需要理解的内容:
Controller 类位于 System.Web.Mvc 命名空间,继承自 ControllerBase 类。
ControllerBase 类实现了 Icontroller 接口的 Execute 方法,在路由器搜索到相应的控制器后,就会调用Execute 方法进入控制器的处理。
(3)ControllerBase 的属性:
ControllerContext:获取或设置控制器上下文。
ValidateRequest:获取或设置一个值,该值指示伺服为此请求启用请求验证。
ValueProvider:获取或设置控制器的值。
ViewData:获取或设置数据的字典。
ViewBag:获取动态视图数据字典。
TempData:获取或设置可以在不同控制器之间传递数据的字典。
(4)ControllerBase 的任务:
定位:找到对应的动作方法。
获取参数:获取动作方法的参数。
处理错误:在执行动作方法中可能出现的错误。
渲染视图:提供默认的 WebFormViewFactory 类来渲染 ASP.NET 视图。