Asp.net MVC2学习笔记1-Route
MVC2 框架安装完成以后我们就可以开始我们的 MVC之旅了,呵呵
本次学习内容:Route
首先 route 的中文意思就是我们常说的“路由”,确实这里也是这个意思,在我们MVC中已经不再使用 XX.aspx 来访问页面了,
所有页面的请求会通过route来解析找到对应的控制器(controller)里面对应的操作(action)来执行的。
mvcapplication项目新建完成后,会默认生成一个 route,在 Global.asax.cs 文件中,我们可以看到
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute 方法就是提供给我们映射一个路由的,我们可以看到默认路由的参数和自带的参数解释
1、Default:路由名称
2、{controller}/{action}/{id}:这是 url 解析格式 ,大括号括起来的是需要解析的参数 {controller}是找到对应的 控制器,{action}是控制器里面的对应的方法,
{id}是默认提供的一个参数名,类似我们以往的 http://xXX.com/abc.aspx?id=XXX 这url里面的id参数
这段就是根据URL格式找到控制器和执行哪个action的重点:
如 http://localhost:12345/Home/Index/2,这里则根据上面的规则解析,找到Home这个controller,并执行home里面的Index 方法,并且方法参数 id的值是2
3、new { controller = "Home", action = "Index", id = "" }:是默认的参数,当没有指定{controller}时 默认 "Home"这个控制器,当没有指定 {action}时 默认"Index" 这个执行方法,类似的 id 就是 如果没有指定{id} 则 使用这里的值
上面就是对默认的一个映射参数的解释也就是默认的一个解析URL格式的配置,呵呵,微软这个功能实在太妙了,这样就把业务逻辑和页面分开了,我们可以通过修改这里的配置,来解析URL执行我们想要执行的业务代码、展示页面。
下面我们可以自己定义一个规则来解析我们所需要的url格式 如:
"myRoute", // Route name
"myRoute/{dt}", // URL with parameters
new { controller = "MyController", action = "MyAction" } // Parameter defaults
);
这里我为新添加的一个 route 起了个名字 叫 "myRoute",
我规定的 url 格式 是 "myRoute/{dt}",刚才上面提到 被大括号括起来的值是参数,而不括起来的则可以看成字符串,后面 dt 是一个参数,这里我没有 在这个规则上写上
{controller} 和 {action}2个参数,这是系统就会找到下面默认提供的参数
"new { controller = "MyController", action = "MyAction" } " 默认控制器 是 "MyController"(注意:控制器的名称叫MyController,实际上类名叫MyControllerController,这点需要注意,否则报404错误。),默认方法是 "MyAction",好,这样我们就添加上了我们自定义规则的路由;
下面就是需要添加 MyController 控制器 和 MyAction 方法;
代码如下
{
//
// GET: /My/
public ActionResult Index()
{
return View();
}
public ActionResult MyAction(DateTime dt)
{
ContentResult cr = new ContentResult();
cr.Content = "MyController's MyAction is Workded!" + dt.ToString("yyyy年MM月dd日");
return cr;
}
}
这里可以看到 MyAction 方法里面接收一个 DateTime 类型的 dt,就是我们规则里面的 {dt}这个参数,
启动我们程序后,在地址栏里输入 http://localhost:2235/myRoute/2010-1-10
就可以看到页面输出:
大家是不是感觉route 很爽了,感觉用起来随心所欲嘛,嘿嘿~