System.Web.Mvc.Controller是大多数MVC开发者需要熟悉的,用来对请求处理提供支持的一个类。Controller类提供了以下三个特性:
1. 动作方法(Action Method): 一个控制器的行为被分解成多个方法(而不是像Handler只有一个Execute方法)。每个动作方法被暴露给不同的URL,并通过从输入请求提取的参数进行调用。
2. 动作结果(Action Result): 你可以返回一个描述动作结果的对象(例如:返回一个视图或重定向到不同的URL或动作方法),然后通过该对象实现你的目的。这种结果和执行的分离简化了单元测试。
3. 过滤器(Filter): 你可以把可重用的行为封装成过滤器,然后通过在源代码中放置一个注解属性的方法,把这种行为标注在一个或多个控制器或方法中。
接收请求参数
控制器经常要访问来自于输入请求的数据,如查询字符串,表单值,以及路由系统根据输入URL解析得到的参数。访问这些数据主要有三种途径:
1. 通过一组上下文对象进行获取;常见的上下文对象包含(Request,HttpContext,RouteData,User,TempData);
2. 作为参数被传递给动作方法而形成的数据;Controller父类使用了叫“值提供器(Value Provider)”和“模型绑定器(Model Binder)”的MVC框架组件来获取动作方法的参数值,它们会抓取Request.Forms,Request.QueryString,Request.Files以及RouteData.Values的数据项。
3. 明确地调用框架的模型绑定特性
产生输出
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来执行这段代码