本文参考:http://www.cnblogs.com/willick/p/3331521.html

1、继承IController接口,示例代码将当前请求的Controller和Action打印到浏览器:

public class BasicController : IController
{public void Execute(RequestContext requestContext) {string controller = (string)requestContext.RouteData.Values["controller"];string action = (string)requestContext.RouteData.Values["action"];requestContext.HttpContext.Response.Write(string.Format("Controller: {0}, Action: {1}", controller, action));}
}

稍微复杂一点的系统,继承IController是需要做许多工作的,不建议直接继承IController接口。

2、MVC 框架的 System.Web.Mvc.Controller 类,提供了足够实用的特性来方便我们对请求的处理和返回结果。它提供了一下几个关键的特性:

  • Action方法:一个 Controller,它的行为被分为多个方法,通常一个方法对应着一个请求,并且可以通过方法参数来取得请求传递过来的数据。
  • ActionResult:可以返回一个描述了 Action 方法执行结果的对象,这样的好处是想返回什么结果就指定对应的返回对象就行,不用关心怎么去执行并生成结果。
  • Filters:通过C#特性,对某一种行为的处理(比如授权和验证)进行封装,方便了在多个 Controller 和 Action 方法之间进行重用。

3、从Controller中获取数据有以下三种主要来源:

  • 一系列的上下文对象。

最常见的上下文对象如下图所示:

  • 传递给 Action 方法的参数。

Controller 类通过 MVC 框架的 value providermodel binder 组件来为 Action 方法获取参数的值。value provider 提供了一系列Controller中可以访问到的值,在内部它通过从 Request.Form、Request.QueryString、Request.Files 和 RouteData.Values 等上下文对象中提取数据(键值集合),然后把数据传递给 model binder,model binder试图将这些数据与Action方法的参数进行匹配。默认的 model binder 可以创建和赋值给任何.NET类型对象参数(即 Action 方法的参数),包括集合和自定义的类型。

  • 显式的调用框架的模型绑定(Model Binding)特性。

4、ActionResult是描述 Action 方法执行结果的对象,它的好处是想返回什么结果就指定对应的返回对象就行,不用关心如何使用Response对象来组织和生成结果。ActionResult 是一个命令模式的例子,这种模式通过存储和传递对象来描述操作。当 MVC 框架从 Action 方法中接收到一个 ActionResult 对象,它调用这个对象的 ExecuteResult 方法,其内部是通过 Response 对象来返回我们想要的输出结果。 MVC框架包含了许多 ActionResult 类型,这些类型都继承自 ActionResult 类,大部分在 Controller 类中都有简便的方法:

除了该表列出来的,还有ContentResultFileResultJsonResult 和 JavaScriptResult

5、从Action传递数据到View中的几种方式:

  • View Model对象:
//Action中
public ViewResult Index()
{ DateTime date = DateTime.Now; return View(date);
} //View中获取
@model DateTime @{ ViewBag.Title = "Index";
}<h2>Index</h2>
The day is: @Model.DayOfWeek

  • ViewBag,是一个动态(dynamic)的弱类型,在程序运行的时候解析,是 MVC3 中新增的特性,只在当前View有效
  • ViewData,是一个字典集合,也是只在当前View有效,性能比 ViewBag 高,但是使用的时候需要类型转换。
  • TempData,也是字典集合,一般用于两个请求之间临时缓存内容或页面间传递消息,保存在 Session 中,使用完以后则从 Session 中被清除。

一般在当前 View 中使用 ViewBag 或 ViewData,在两个请求之间传递临时数据用 TempData。由于 TempData 被使用后即被释放,所以如果要二次使用 TempData 中的数据就需要将其存到其他变量中。

转载于:https://www.cnblogs.com/wangwust/p/6386849.html

【ASP.NET MVC 学习笔记】- 10 Controller和Action(1)相关推荐

  1. 【ASP.NET MVC 学习笔记】- 07 使用 Entity Framework

    本文参考:http://www.cnblogs.com/willick/p/3304534.html 1.ORM(Object Relation Mapping)工具,是为了解决"关系数据库 ...

  2. 【ASP.NET MVC 学习笔记】- 16 Model Binding(模型绑定)

    本文参考:http://www.cnblogs.com/willick/p/3424188.html. 1.Model Binding是Http请求和Action方法之间的桥梁,是MVC框架根据Htt ...

  3. ASP.NET MVC4学习笔记之Controller的激活

    一. 高层相关类说明 当路由系统根据请求Url收集路由信息后,下一步就要将路由信息传给Controller激活系统,Controller激活系统负责实现了IController接口的Controlle ...

  4. 【ASP.NET MVC 学习笔记】- 06 在MVC中使用Ninject

    本文参考:http://www.cnblogs.com/willick/p/3299077.html 1.在ASP.NET MVC中一个客户端请求是在特定的Controller的Action中处理的. ...

  5. 【ASP.NET MVC 学习笔记】- 09 Area的使用

    本文参考:http://www.cnblogs.com/willick/p/3331519.html 1.ASP.NET MVC允许使用 Area(区域)来组织Web应用程序,这对于大的工程非常有用, ...

  6. ASP.NET MVC 入门4、Controller与Action

    本系列文章基于ASP.NET MVC Preview5. Controller是MVC中比较重要的一部分.几乎所有的业务逻辑都是在这里进行处理的,并且从Model中取出数据.在ASP.NET MVC ...

  7. spring4.0基于Java配置_Spring MVC学习笔记之Controller查找(基于Spring4.0.3)

    0 摘要 本文从源码层面简单讲解SpringMVC的处理器映射环节,也就是查找Controller详细过程 1 SpringMVC请求流程 Controller查找在上图中对应的步骤1至2的过程 Sp ...

  8. ASP.NET MVC学习之路由篇(2)

    ASP.NET MVC学习之路由篇(2) 原文:ASP.NET MVC学习之路由篇(2) 继ASP.NET MVC学习之路由篇(1)后继续学习. 7.解决与物理路径的冲突 当发送一个请求至ASP.NE ...

  9. ASP.NET MVC学习之控制器篇

    一.前言 许久之后终于可以继续我的ASP.NET MVC连载了,之前我们全面的讲述了路由相关的知识,下面我们将开始控制器和动作的讲解. ASP.NET MVC学习之路由篇幅(1) ASP.NET MV ...

最新文章

  1. [linux]Linux挂载光盘,解压光盘内的tar安装包,并安装软件(Install VMware Tools in a Linux Guest)...
  2. pip和conda到底有什么不一样?
  3. 【项目实战课】基于Pytorch的RetinaFace人脸与关键点检测实战
  4. [C/C++面试题]-错题笔记与解析
  5. 为什么Python是最吸金编程语言?
  6. 南邮哈夫曼编码c语言代码_漫画:“哈夫曼编码” 是什么鬼?
  7. 【OpenCV 例程200篇】64. 图像锐化——Sobel 算子
  8. 自然数从1到n之间,有多少个数字含有1
  9. 洛谷——P1008 [NOIP1998 普及组] 三连击
  10. OpenCV图像处理(4)——去除小面积
  11. 【廖雪峰官方网站/Java教程】注解
  12. 中国未来5年IP地址需求总量高达345亿
  13. java 回调函数传值_说明Java的传递与回调机制的代码示例分享
  14. php中的图片变名为8位用什么,CSS_详解PNG图片,1、PNG图片类型 PNG格式有8位、 - phpStudy...
  15. Python 开发音乐下载器实践
  16. Python常用快捷键整理
  17. android 后台运行管理,Android 后台运行白名单实现保活
  18. 输油管的布置数学建模matlab,输油管布置问题的优化模型
  19. 一点一滴开始搭建自己的项目框架之支付宝篇 支付宝提现
  20. SQL Server 日期 字符串 格式转换 函数 datetime convert

热门文章

  1. 第三章JavaScript 内置对象
  2. 页面提交插入到数据库 1.jsp
  3. shell脚本规划化模板
  4. ajax返回JSON时的处理方式
  5. RabbitMQ 相关概念
  6. Hystrix之Dashboard的常见问题
  7. uvm_comps.svh
  8. 第53天:鼠标事件、event事件对象
  9. 第7章 实战演练:爬取百度百科1000个页
  10. Windows上PHP扩展的实现,部署及应用