1、Controller类

i、Controller必须为公开类;

ii、必须以Controller结尾;

iii、继承Controller基类或实现IController接口的类;

iv、类中必须包含数个返回值为ActionResult的公开方法,这些方法在MVC中称为Action;

2、Controller执行过程:

当Controller被MvcHandler选中之后,下一步就是通过ActionInvoker选取适当的Action来执行,在Controller中,每一个Action可以定义零到多个参数,ActionInvoker会依据当前的RouteValue及客户端传来的信息准备可以输入Action参数的数据,最后正式调用被Controller选中的那个Action方法【参数输入的内容是通过模型绑定(Model Binding)机制从RequestContext属性中获取数据,并将数据对应或输入到方法的参数中的。】Action执行完后的返回值通常是ActionResult类(其子类有ViewResult用于返回一个View、RedirectResult用于将网页转到其他地址、ContentResult用于返回一段文字内容、FileResult用于返回一个二进制文件),Controller得到ActionResult类之后,就会开始执行ActionResult类的ExecuteResult()方法,并将执行结果返回客户端,这时Controller任务ok。

3、在Controller执行时还有一个动作过滤器(Action Filter)机制,分为4类:

授权过滤器(Authorization Filter)

动作过滤器(Action Filter)

结果过滤器(Result Filter)

例外过滤器(Exception Filter)

如果ActionInvoker找不到对应的Action可用,默认会执行System.Web.Mvc.Controller类的HandleUnknownAction()方法,在该类中,HandleUnknownAction方法默认会响应“HTTP404找不到资源”的错误信息。

C#代码  
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. namespace MvcDemo.Controllers
  7. {
  8. [HandleError]
  9. public class HomeController : Controller
  10. {
  11. public ActionResult Index()
  12. {
  13. ViewData["Message"] = "欢迎使用 ASP.NET MVC!";
  14. return View();
  15. }
  16. public ActionResult About()
  17. {
  18. return View();
  19. }
  20. }
  21. }

ViewData表示一个Dictionary对象,可以在View中读取该对象被设定的数据(<%:ViewData["Message"] %>或使用<%=Html.Encode(ViewData["Message"] )%>)。

View()方法是来自于Controller基类里的一个辅助方法,返回ViewResult继承ActionResult,如果没有View中没有参数,则返回此Action方法名的页面View的第一个参数就是要传给View使用的Model数据,其类型不能为string,否则会被当成视图名称来处理。

动作名称选取器:

C#代码  
  1. public class HomeController:Controller{
  2. //要求的网址:http://localhost/Home/Index
  3. //返回的是/Views/Home/Index.aspx
  4. public ActionResult Index(){
  5. return view();
  6. }
  7. }
  8. public class HomeController:Controller{
  9. //要求的网址:http://localhost/Home/Default
  10. //返回的是/Views/Home/Default.aspx
  11. [ActionName("Default")]
  12. public ActionResult Index(){
  13. return view();
  14. }
  15. }

动作方法选取器

C#代码  
  1. [NonAction]
  2. public ActionResult Index(){
  3. reurn view();
  4. }
  5. private ActionResult Index(){
  6. reurn view();
  7. }

还有HttpGet、HttpPost、HttpDelete、HttpPut属性,一根用于Action同名时,一个用来显示,一个用来操作。由于HTML窗口无法送出“Delete”这个HTTP动词,所以如果希望Action能提供像REST协议那样的方式来处理删除动作,又能通过同一个窗口使用这个只允许“Delete”的动作的话,可以使用Html.HttpMethodOverride()方法的HTML辅助方法来模拟HTTP DELETE方法的行为,但实际上窗口还是以HTTP POST的方式送出的。

ActionResult:

说明:

1)、在ViewResult中的参数指定页面名称和应用的主版页面(MasterPage)名称,而页面的Page声明中也包含了MasterPageFile属性,则会以Action中的MasterPage为主。

2)、在PartialViewResult类中,功能与ViewResult类类似,但它无法为View赋值MasterPage,通常用在前端为Ajax应用程序的情况下,并可以通过Ajax来取得网页中的部分内容。

3)、EmptyResult,有些Action在执行后其实不需要返回任何数据,例如一个页面执行完成后直接转到其他页面,EmptyResult类不会执行任何响应客户端的程序,所以也不会返回任何数据。

C#代码  
  1. public ActionResult Empty(){
  2. return new EmptyResutl();
  3. }
  4. public viod Empty(){
  5. return;
  6. }

4)、ContentResult类可以响应文字内容的结果,并且可以响应任意指定文字内容、Content-Type和文字编码。

C#代码  
  1. public ActionResult Content(){
  2. string strHTML="";
  3. return Content(strHTML);
  4. }
  5. public string Content(){
  6. string strHTML="";
  7. retrun strHTML;
  8. }
  9. //说明,在MVC中只要Action返回的不是ActionResult,就会将返回的类转换成字符串输出;

5)、FileResult,可以响应任意的文件内容,包括二进制格式的数据,例如图像文件、PDF文档、zip文件,你可以输入byte数组、文件路径、Stream数据、Content-Type、下载文件名等参数并将返回客户端。其三个子类:

FilePathResult:响应一个实体文件

FileContentResult:响应一个byte数组的内容

FileStreamResult:响应一个Stream数据

C#代码  
  1. public ActionResult GetFile(){
  2. byte[] fileContent = GetFileByteArrayFromDB();
  3. return File(fileContent,"application/pdf","YourReport.pdf");
  4. }

当为中文名时需要Server.UrlPathEncode()方法进行编码

6)、JavaScriptResult类的用途是将JavaScript程序代码响应给浏览器,

7)、JsonResult类可以自动将任意对象的数据序列转换成JSON格式返回,JsonResult类使用JavaScriptSerializer实例完成JSON序列化的操作,但如果你的对象无法序列化,这个过程就会发生意外,在使用JsonResult从MVC2.0开始为了避免JSON Hijacking攻击,设置在默认的情况下,任何以JsonResult类返回的请求都不允许GET方法从中获取任何JSON数据。

C#代码  
  1. public ActionResult JSON(){
  2. return Json(new {id=1;name="will"});
  3. }

如果一HTTPPOST方法取得的内容应该会是:{"id":1,"name":"will"}但是使用HTTPGET则获取不到,并且报错,但是如果单纯只使用Get方法则数据无法被浏览器缓存,所以可以通过以下方式让get方式可以获取Json数据

C#代码  
  1. public ActionResult JSON(){
  2. return Json(new {id=1;name="will"},JsonRequestBehavior.AllowGet);
  3. }

8)、RedirectResult主要用途是执行指向其他页面的重定向

9)、RedirectToRoute,

a、辅助方法RedirectToAction

转到同一个Controller中的另一个Action

C#代码  
  1. public ActionResult REdirectToActionSample(){
  2. return RedirectToAction("SamplePage");
  3. }

转到指定Controller的指定Action中

C#代码  
  1. public ActionResult REdirectToActionSample(){
  2. return RedirectToAction("List","Member");
  3. }

转到MemberController的List Action,并且加上page这个RouteValue值

C#代码  
  1. public ActionResult REdirectToActionSample(){
  2. return RedirectToAction("List","Member",new {page=3});
  3. }

b、辅助方法RedirectToRoute

转到同一个Controller中的另一个Action

C#代码  
  1. public ActionResult REdirectToActionSample(){
  2. return RedirectToRoute(new {action ="SamplePage"});
  3. }

转到指定Controller的指定Action中

C#代码  
  1. public ActionResult REdirectToActionSample(){
  2. return RedirectToRoute(new {controller="Member",action="List"});
  3. }

转到MemberController的List Action,并且加上page这个RouteValue值

C#代码  
  1. public ActionResult REdirectToActionSample(){
  2. return RedirectToRoute(new {controller="Member",action="List",page=3});
  3. }

mvc Controller类介绍的更多相关文章

  1. spring mvc controller中的异常封装

    http://abc08010051.iteye.com/blog/2031992 一直以来都在用spring mvc做mvc框架,我使用的不是基于注解的,还是使用的基于xml的,在controlle ...

  2. System.Web.Mvc.Controller.cs

    ylbtech-System.Web.Mvc.Controller.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicK ...

  3. spring mvc 的Controller类默认Scope是单例(singleton)的

    使用Spring MVC有一段时间了,之前一直使用Struts2,在struts2中action都是原型(prototype)的, 说是因为线程安全问题,对于Spring MVC中bean默认都是(s ...

  4. .NET/ASP.NET MVC Controller 控制器(深入解析控制器运行原理)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controll ...

  5. MVC Controller Dependency Injection for Beginners【翻译】

    在codeproject看到一篇文章,群里的一个朋友要帮忙我翻译一下顺便贴出来,这篇文章适合新手,也算是对MEF的一个简单用法的介绍. Introduction In a simple stateme ...

  6. 二、ASP.NET MVC Controller 控制器(一:深入解析控制器运行原理)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controll ...

  7. C# MVC分页简单介绍

    ASP.NET MVC中进行分页的方式有多种,这里介绍一种简单实用的方法 一:在实现分页之前,先添加“PagedList”和“PagedList.Mvc”两个组件,具体下载直接在NuGet程序包里收索 ...

  8. .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI

    作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...

  9. MVC Controller的激活

    各Controller的继承关系 Controller最重要的是对Execute方法的调用,当目标Controller对象被激活后,对请求的后续处理和最终响应均是通过执行这个Execute方法来完成. ...

随机推荐

  1. ES6 之 let和const命令 Symbol Promise对象

    ECMAScript 6入门 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了. (2016年6月,发布了小幅修订的<ECMASc ...

  2. 嗅探js css 文件是否加载成功示例

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  3. HDU 5821 Ball

    记录一下每个位置最终到达的位置.然后每次操作排序. #pragma comment(linker, "/STACK:1024000000,1024000000") #include ...

  4. 第九十节,html5+css3pc端固定布局,底部区域,说明区域,版权区域

    html5+css3pc端固定布局,底部区域,说明区域,版权区域 完成: HTML代码: <!--尾部--> <footer class="wei-bu"> ...

  5. js-字符串函数

    js字符串函数 JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";v ...

  6. 你应该知道的CSS文字大小单位PX、EM、PT

    这里引用的是Jorux的“95%的中国网站需要重写CSS”的文章, 题目有点吓人,但是确实是现在国内网页制作方面的一些缺陷.我一直也搞不清楚px与em之间的关系和特点,看过以后确实收获很大.平时都是用 ...

  7. HTML通过事件传递参数到js 二 event

    原文链接http://blog.sina.com.cn/s/blog_8a18c33d010172pp.html event用例: <!DOCTYPE html><html>& ...

  8. 13.hibernate的native sql查询(转自xiaoluo501395377)

    hibernate的native sql查询   在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hi ...

  9. heap和stack的区别

    参考<程序员面试宝典> 1.栈区(stack) 由编译器自动分配和释放,存放函数的参数值,局部变量值等.其操作方式类似于数据中的栈. 2.堆区(heap) 一般由程序员分配和释放,若程序员 ...

  10. flex安装debug

    1.解决 不是最新版本的问题: cmd-->regedit-->HKEY_LOCAL_MATCHING-->SOFTWARE-->MACROMEDIA -->FLASHP ...