MVC中Controller和Action讲解上篇
一般我们用mvc开发程序时一般需要三个步骤,
创建模型、创建控制器、创建视图
之前开发程序都是按照这样的步骤来开发的,也没有想过mvc的原理,比如route是怎么找到controller的,controller又是怎么找到action的,actionResult又是怎么输出到view中去的,
本篇文章结合自己所学知识讲解controller和action,至于route-->controller-->action这段部分将放在下骗随笔讲解。
一:controller类执行原理
当我们新建立一个控制器的时候会发现它是继承Controller类的,而Controller又是继承ControllerBase的,转到ControllerBase的定义如下图

我们发现ControllerBase类是继承IController接口,IControlle接口只有一个Execute方法,而Execute方法在ControllerBase类中已经实现,写了这么多其实可用一句话可以概括
controller 中一切对请求的处理都是从 Execute 方法开始.
备注:Controller工厂维护了一个Controller类列表,这个列表类必须满足其中一个条件就是:Controller必须是直接或间接继承
IController接口,我们创建控制器继承的Controller已经继承了ControllerBase类,ControllerBase类已经继承并实现了IController接口
我们可以做个demo验证一下:

继承了IController的BasicController类,Controller工厂是可以找到并创建它的实例的,这样一个简单的Controller类就写完了.当时它并不适合在实际项目中适用.
二:理解ActionResult
一般我们简单的在Controller中实现一个ActionResult我们通常这样写
public ActionResult Index()
{
return View();
}
mvc将会转到Index视图,可是mvc是怎么做到的呢,我们可以查看ActionResult的定义,
public abstract class ActionResult
{
protected ActionResult();
public abstract void ExecuteResult(ControllerContext context);
}
我们发现ActionResult里面有一个可重写的ExecuteResult方法,这个方法就是关键,一旦Controller执行ActionResult方法时,ActionResult类里面的ExecuteResult将会被调用..
我们做个demo测试一下
public class CustomReditect : ActionResult
{
public string url { get; set; } //重写ActionResult的ExecuteResult方法
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.Redirect(url);
}
} public class DefaultController : Controller
{
public ActionResult Index()
{
return new CustomReditect{url="/Redir/Index"};//这里是关键
}
}
最后总结一下Execute和ExecuteResult两个方法:
一:mvc一切请求都是从execute方法开始的
二:一切继承ActionResult的类都是从ExecuteResult开始的。
MVC中Controller和Action讲解上篇的更多相关文章
- ASP.NET Core MVC中Controller的Action,默认既支持HttpGet,又支持HttpPost
我们知道ASP.NET Core MVC中Controller的Action上可以声明HttpGet和HttpPost特性标签,来限制可以访问Action的Http请求类型(GET.POST等). 那 ...
- ASP.NET Core MVC中Controller的Action如何直接使用Response.Body的Stream流输出数据
在ASP.NET Core MVC中,我们有时候需要在Controller的Action中直接输出数据到Response.Body这个Stream流中,例如如果我们要输出一个很大的文件到客户端浏览器让 ...
- Asp.Net MVC中Controller、Action、View是如何激活调用的
上篇我们介绍了MVC的路由,知道在注册路由的时候会创建一个MvcHandler将其和Url规则一起放入到了RouteCollection中,之后请求通过UrlRoutingModule,根据当前的UR ...
- Asp.net MVC 中Controller返回值类型ActionResult
[Asp.net MVC中Controller返回值类型] 在mvc中所有的controller类都必须使用"Controller"后缀来命名并且对Action也有一定的要求: 必 ...
- MVC 中Controller返回值类型ActionResult
下面列举Asp.net MVC中Controller中的ActionResult返回类型 1.返回ViewResult视图结果,将视图呈现给网页 public ActionResult About() ...
- ASP.NET MVC中controller和view相互传值的方式
ASP.NET MVC中Controller向view传值的方式: ViewBag.ViewData.TempData 单个值的传递 Json 匿名类型 ExpandoObject Cookie Vi ...
- dotNET开发之MVC中Controller返回值类型ActionResult方法总结
1.返回ViewResult视图结果,将视图呈现给网页 2. 返回PartialViewResult部分视图结果,主要用于返回部分视图内容 3. 返回ContentResult用户定义的内容类型 4. ...
- MVC中Controller控制器相关技术
第6章Controller相关技术 Controller(控制器)在ASP.NET MVC中负责控制所有客户端与服务器端的交互,并 且负责协调Model与View之间的数椐传递,是ASP.NET MV ...
- Asp.net MVC中 Controller 与 View之间的数据传递
在ASP.NET MVC中,经常会在Controller与View之间传递数据 1.Controller向View中传递数据 (1)使用ViewData["user"] (2)使用 ...
随机推荐
- 基于BaseHTTPServer的简单存储服务器
服务器代码: from BaseHTTPServer import BaseHTTPRequestHandler from BaseHTTPServer import HTTPServer impor ...
- jQuery点击图片弹出大图遮罩层
使用jQuery插件HoverTreeShow弹出遮罩层显示大图 效果体验:http://hovertree.com/texiao/hovertreeshow/ 在开发HoverTreeTop项目的产 ...
- css 盒模型相关样式
话不多说,一切还是从最基础的说起. 盒的类型 1.盒的基本类型 在css中,用display定义盒的类型,一般分为block类型与inline类型. 例如div属于block类型,span属于in ...
- ASP.NET运行原理
1,ASP.NET运行原理: 客户端向服务器发出请求 → 服务器处理请求→ 处理好的数据以报文发给浏览器 → 浏览器显示请求结果 2,Chrome浏览器,查看请求过程:F12打开浏览器的调试窗口: 3 ...
- Java Concurrency - 线程执行器
Usually, when you develop a simple, concurrent-programming application in Java, you create some Runn ...
- Linux 命令 - wget: 非交互式网络下载器
命令格式 wget [option]... [URL]... 命令参数 启动选项 -V, --version 打印版本信息 -h, --help 打印帮助信息 日志和输入文件选项 -o logfile ...
- 初学Android: 四大组件之Activity
1.activity (1)一个Activity通常就是一个单独的屏幕(窗口),简单来说activity就是一个交互界面,一般应用程序都要由一个或者多个activity组成. (2)Activity之 ...
- Javascript之换肤(未完待续)
这个项目我还没有完全写出来,先记录至此.感觉是方法不对,背景图片的切换方法有Problem.如若有一大神发现了我的文章,还望指导,吾将感激不尽.日后代码还会再钻研再改改. <head> & ...
- 第五十九篇、OC录制小视频
用 AVCaptureSession + AVCaptureMovieFileOutput 来录制视频,并通过AVAssetExportSeeion 手段来压缩视频并转换为 MP4 格 AVFound ...
- jvmstat监控jvm内存
1.下载jvmstat-3_0.zip: 2.配置环境变量JVMSTAT_JAVA_HOME为jdk目录E:\Program Files\Java\jdk1.5.0_12 3.监控本机: jps查看 ...