006.ASP.NET MVC ActionResults说明
1.前言
Action Result在ASP.NET MVC控制器系统中是非常重要的,我们要时常关注这些。理解它们是怎么给我们带来更多的选择会让你的代码更加健壮。
2.什么是Action Result
Action Result是控制器方法(动作方法)的返回类型,作为基础类,为*Result类服务。一个动作方法传递模型到视图、文件流、重定向到新的控制器,会对手上的工作所必需的。控制器作为系统的组成部分,就像一个交通警察。
有许多衍生的ActionResult类型可以作为一些特定视图的特定的返回值。将鼠标悬浮在一个方法的上面,你可以快速浏览这些ActionResult类型,这是由IDE提供的TOOL窗口(PS:看到下面的评论,这个是需要下载一个插件的,个人觉得没有必要下载)。
在详细的提示下,tab下列出一系列的从ActionResult衍生出的类型。尽管这些提示只在获取焦点时才能看到,我们也希望能在其它地方看到这些返回类型的简短的说明,比如引用或者返回这些类型的时候。
(PS:下面的这张图片是作者IDE的,我们的话,需要下载插件,但出来的效果可能会有些差异。)
如果想更深层次地了解什么是ActionResult和它是怎么工作的,可以在方法的结尾设置一个断点,我们可以看到非常详细的信息,在断点查看窗口Watch Window中查看,如下图
注意到里面的模型,ViewBag ViewData TempData,在这个练习中,在窗口中可以看出这些都是强类型的,都是Object类型的容器。
这些在视图中使用的对象正是你所需要的。当然Model是经常使用的,包含我们程序中使用的一系列其它对象。TempData对象用于控制器之间传递数据,ViewData和ViewBag用于控制器和视图之间传递数据。
Model属性是传递给视图的模型,它的数据类型需要与视图中的标签@model搭配使用,请看上面的图片,Model属性包含强类型的Product对象(也可以是你想要返回的对象)是与视图中的模型相匹配的。
看到Watch窗口中,运行时将一个ActionResult转换成一个ViewResult,然而如果你想要在设计时得到更多的具体的信息,转换ActionResult到特定或者衍生出来的类,比如,一个ViewResult产生一个与ActionResult相同结构的对象。其中,使用强类型会使用代码更加准确,对象的判断发生在编译时,而不是在运行时。
3.动作方法及其结果、路由
动作方法和路由在所有的MVC程序中一起使用。MVC实现这些通过使用一个集合的转换,global.asax.cs文件中写定义路由的模版。这些模版将HTTP请求与控制器和动作方法联系在一起。当一个HTTP请求一个路由系统的时候,它会选择使用哪一个方法运行以返回相应的视图。
global.asax.cs文件中定义这些模版,如{controller}/{action}/{id} (PS:路由的选择在之前的文章中都有,可以查看,自己也是想用来巩固自己已有的知识)
(PS:现在发现自己没有一些国外优秀的IT网站,一些深层次的文章自己也看得迷迷糊糊,希望大家能推荐几个好的网站或者一些IT大神的BLOG,自己也想加倍地学习,给自己时间真心不多,学习的时间真心少了,3Q)