System.Web.Mvc.Controller是大多数MVC开发者需要熟悉的,用来对请求处理提供支持的一个类。Controller类提供了以下三个特性:
-
动作方法(Action Method): 一个控制器的行为被分解成多个方法(而不是像Handler只有一个Execute方法)。每个动作方法被暴露给不同的URL,并通过从输入请求提取的参数进行调用。
-
动作结果(Action Result): 你可以返回一个描述动作结果的对象(例如:返回一个视图或重定向到不同的URL或动作方法),然后通过该对象实现你的目的。这种结果和执行的分离简化了单元测试。
-
过滤器(Filter): 你可以把可重用的行为封装成过滤器,然后通过在源代码中放置一个注解属性的方法,把这种行为标注在一个或多个控制器或方法中。
接收请求参数
控制器经常要访问来自于输入请求的数据,如查询字符串,表单值,以及路由系统根据输入URL解析得到的参数。访问这些数据主要有三种途径:
-
通过一组上下文对象进行获取;常见的上下文对象包含(Request,HttpContext,RouteData,User,TempData);
-
作为参数被传递给动作方法而形成的数据;Controller父类使用了叫“值提供器(Value Provider)”和“模型绑定器(Model Binder)”的MVC框架组件来获取动作方法的参数值,它们会抓取Request.Forms,Request.QueryString,Request.Files以及RouteData.Values的数据项。
-
明确地调用框架的模型绑定特性
产生输出
MVC框架通过使用动作结果把指明意图和执行意图分离开。它有助于实现更简单,更简洁且更一致的代码,这些代码更易于阅读和测试。MVC框架所有的内建动作结果类型都派生于ActionResult。
例如:
类型
描述
辅助器方法
ViewResult
返回指定的或默认的视图模板
View
PartialViewResult
返回指定的或默认的分部视图模板
PartialView
RedirectToRouterResult
重定向到一个动作方法或路由
RedirectToAction
RedirectToActionPermanent
RedirectToRoute
RedirectToRoutePermanent
RedirectResult
重定向到指定的URL
Redirect
ContentResult
返回文本数据
Content
FilePathResult
FileContentResult
FileStreamResult
将二进制数据直接传给浏览器
File
JsonResult
将一个.NET对象序列化为JSON格式
Json
JavaScriptResult
发送一个由浏览器执行的JavaScript源代码判断
JavaScript
HttpUnauthorizedResult
将响应的HTTP状态码设置为401,这回引发当前认证机制要求访问者登陆
None
HttpNotFoundResult
返回一个404错误
HttpNotFound
HttpStatusCodeResult
返回一个指定的HTTP状态码
None
EmptyResult
什么也不做
None
详细解释:
PartialView
当需要多次使用一个页面的某一部分的时候,可以把它封装成分部视图。我们完全可以通过AJAX调用控制器的PartialView方法来返回不同的HTML。只是这样做所需的字节数会比返回一个JSON要多。PartialView和View的区别在于PartialView不能包含母版页。
RedirectToAction
可以转到指定的控制器中的动作方法,它采用的302重定向。
RedirectToAction(“Index”,“Home”);
RedirectToRoute
定义一个路由对象来重定向,它采用的302重定向。
RedirectToRoute(new { controller = “Admin”, action = “Index” });
RedirectToActionPermanent
与RedirectToAction不同的是它采用的是301重定向,这种重定向对SEO更友好,因为它可以保留原网页的Ranking记录。
Content
返回指定文本内容,可以指定文本类型和编码格式
File
显示/下载 一个文件
Json
返回JSON格式数据
JavaScript
返回一段JavaScript字符串到前台,但不执行,前台可以调用eval来执行这段代码