ASP.NET MVC --- 控制器详解

理解控制器

中转作用

  1. 承上启下,根据用户输入,执行响应行为(动作方法)

  2. 在行为中调用模型的业务逻辑,并返回给用户结果(视图)

中介角色

  1. 分离视图和模型,让视图和模型各司其职,控制器赋值二者交互

  2. 只负责数据的传送,不负责处理

控制器类

所有的控制器的基类都是Controller,而Controller类重点就是提供ASP.NET MVC网站进行的http请求的方法

而Controller自身具有的基类是ControllerBase

ControllerBase类

  1. Controller类位于System.Web.Mvc命名空间,继承自ControllerBase类

  2. ControllerBase类实现了Icontroller接口的Execute方法,在路由搜索到相应的控制器及动作方法,Execute方法进入控制器的处理

属性

  1. ControllerContext:获取或设置控制器上下文

  2. ValidateRequest:获取或设置一个值,该值指示是否为此请求启用请求验证

  3. ValueProvider:获取或设置控制器的值

  4. ViewData:获取或设置数据的字典

  5. ViewBag:获取动态视图数据字典

  6. TempData:获取或设置可以在不同控制器之间传递数据的字典

任务

  1. 定位:找到相应的动作方法

  2. 获取参数:获取动作方法的参数

  3. 处理错误:在执行动作方法中可能出现的错误

  4. 渲染视图:提供默认的WebFormViewFactory类来渲染ASP.NET视图

动作方法的参数

动作方法参数映射

  1. 在动作方法中使用“参数映射”,参数会自动匹配

  2. 参数映射的好处:再也不需要手工获取参数并做类型转换,在多个参数时非常明显

映射参数的来源

来源优先级说明
表单数据表单提交的数据(Request.Form)
路由数据路由数据(RouteData.Values)
URL数据URL数据(Request.QueryString)

参数自动映射,按照优先级依次查找参数

动作方法参数要求

  1. 动作方法的参数必须和数据模型中的属性类型、名称保持一致(大小写不区分)

  2. 视图中的表单name属性值或URL中键值对名称和数据模型中属性名称保持一致

  3. 满足三方面的命名一致才能实现参数映射

  4. 如果视图中表单或URL或路由数据只要能够确保是一个数据模型,那么就能够在动作方法中直接使用这个数据模型对象作为参数

值类型参数映射失败

解决方案:可以将值类型定义为可空类型,可选参数

动作方法的特性

例如控制器中出现动作方法重载

 

路由系统不能根据方法参数去定位动作方法

Http请求特性

针对请求类型定位方法,解决同名冲突问题

特性名说明
HttpGet针对Get请求
HttpPost针对Post请求
HttpDelete针对Delete请求
HttpPut针对Put请求

关于Http谓词

  1. 特点:经常使用,如果不加上该特性,默认动作方法接收所有谓词的请求

  2. 一般开发中都会加上谓词,限定请求谓词类型

NonAction特性

  1. 可以将控制器中的方法声明为“非动作方法”

  2. 对于控制器内部使用的方法非常有用,加上该特性后,外部不能访问,也可以解决同名方法冲突问题

ActionName特性

  1. 为动作方法“重命名”,解决同名方法冲突问题

  2. 视图中使用时,需要修改成“重新命名”后的方法

注意:当动作方法应用了ActionName特性后,如果动作方法内部使用View()方法调用视图,(也就是不指定视图名称),则调用的是和ActionName值相同的视图,而不再是原动作方法名称视图

ActionResult详解

ActionResult和View()

所有的View()方法返回的都是ViewResult对象

名称说明
View()创建一个将视图呈现给响应的ViewResult对象
View(Object)使用模型创建一个将视图呈现给响应的ViewResult对象
View(string)使用视图名称创建一个呈现视图的ViewResult对象
View(IView)创建一个呈现指定的IView对象的ViewResult对象
View(string,object)使用模型创建一个指定视图名称的ViewResult对象
View(string,string)使用视图名称和母版页名称创建一个将视图呈现给响应的ViewResult对象
View(IView,object)创建一个呈现指定的IView对象的ViewResult对象
View(string,string,object)使用视图名称、母版页、和模型创建一个呈现视图的ViewResult

返回值是一个抽象类,体现了多态性,多态性解决了实际开发中响应结果为html、文件等不同内容的输出

从动作方法输出内容

当客户端不需要输出HTML,而是文件、文本内容等该怎么办

输出类型说明控制器输出的方法
EmptyResult没有返回值,动作方法不需要输出
ContentResult将指定内容作为文本输出Conten(string)
JsonResult输出JSON字符串Json(object)
JavaScriptResult输出JavaScript文件JavaScript(string)
RedirectResult指定的URL来执行重定向Redirect(string)
RedirectToRouteResult指定路由值来执行查询RedirectToAction(string)
FilePathResult指定文件路径来输出文件File(string ,string)
FileContentResult指定字节数组来输出文件File(byte[],string)
FileStreamResult指定流来输出文件File(Stream,string)
ViewResult调用视图文件输出视图View()

隐式动作类型

  1. 动作方法返回值类型可以是ActionResult以外的任意类型

  2. 类型说明

    int类型--->ContentResult类型

    void类型--->EmptyResult类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值