日期:2014-05-16 浏览次数:20882 次
routes.MapRoute( name: "Default", url:"{controller}/{action}/{id}", defaults: new { controller ="Home", action = "Index", id = UrlParameter.Optional } );
public void Execute(RequestContextrequestContext) { var controller = (string)requestContext.RouteData.Values["controller"]; var action =(string)requestContext.RouteData.Values["action"]; requestContext.HttpContext.Response.Write( string.Format("Controller: {0}, Action: {1}", controller,action)); }
这是最简单的controller创建方式,但是通常不这样做,因为:
我们拿到的是RequestContext对象,需要手动去生成html写到Response里面返回客户端,代码将很难维护。
集成Controller类完成一个controller
一般的,每当我们新建一个controller,都是自动继承controller类,这个类主要帮我们完成两件事情:
1. 会从路由拿到requestContext对象,解析出action以及参数,并调用
2. 提供不同的result(command模式),返回给客户端
另外,我们还可以使用filter,完成不同的crosscutting的concern,后面章节会详细介绍。
由于引入了action和result的概念,使得我们的代码更容易单元测试,起码比我们自己继承IController接口,直接操作RequestContext对象容易很多。
public class DerivedController :Controller { public ActionResult Index() { ViewBag.Message = "Hellofrom the DerivedController Index method"; return View("MyView"); } }
View代码:
@{ ViewBag.Title ="MyView"; } <h2>MyView</h2> Message: @ViewBag.Message
代码很简单,就是用Viewbag传值到View显示出来,Controller返回了最常用的result,ViewResult。
1. 从context object 直接提取
2. 通过参数传进来(由基类controller完成解析)
3. 通过model binding
Request.QueryString |
从Get 请求的url中取 |
Request.Form |
从Post请求的表单取 |
Request.Cookies |
把值放在请求的cookie里带过来 |
RouteData.Route |
从路由表里取注册的路由名 |
RouteData.Values |
从路由表获取路由配置的匿名对象 |
HttpContext.Cache |
应用程序缓存 |
HttpContext.Items |
存储一些值,只在同一请求中使用(可以在httppipeline过程的不同module,handler,以及页面传递值) |
HttpContext.Session |
当前用户的session |
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|