浅谈MVC3.0 及其URL路由机制

 图片来源:Kencery

 

理解MVC三部分的含义和用法。
当我们创建一个asp.net mvc应用程序时,系统会默认生成三个文件夹:
1:Controllers,对应MVC中的C,主要是处理浏览器请求与做出的响应;
2:Models,对应MVC中的M,存放数据模型,与数据库交换的。
3:Views,对应MVC中的V,响应请求,呈现给用户的界面。


      个人认为最重要的一步是知道mvc路由机制,众所周知,asp.net程序要想访问一个页面,都是根据页面路径来访问,在mvc中完全不一样了,mvc封装了这种访问。通过URL路由机制访问。URL 路由模型将浏览器请求映射到特定的 MVC 控制器操作。在Global.asax 文件中创建应用程序的路由表。


     首先,用户通过Web浏览器向服务器发送一条url请求,这里请求的url不再是xxxx.aspx格式,而是http://HostName/ControllerName/ActionName/Parameters的格式。 应用程序第一次启动时,调用 Application_Start() 方法。此方法将调用 RegisterRoutes() 方法。RegisterRoutes() 方法创建路由表。

      默认路由表包含一个路由(名称为 Default)。Default 路由将 URL 的第一段映射到控制器名称,将第二段映射到控制器操作,将第三段映射到名称为 id 的参数。(三个参数如果没有提供,系统会调用默认参数)

Global Code
 1 publicstaticvoid RegisterRoutes(RouteCollection routes)
2 {
3 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
4
5 routes.MapRoute(
6 "Default", // 路由名称
7 "{controller}/{action}/{id}", // 带有参数的 URL
8 new { controller ="Default", action ="Index", id = UrlParameter.Optional } // 参数默认值
9 );
10
11 }
12
13 protectedvoid Application_Start()
14 {
15 AreaRegistration.RegisterAllAreas();
16
17 RegisterGlobalFilters(GlobalFilters.Filters);
18 RegisterRoutes(RouteTable.Routes);
19 }

 

 总结:简单的程序可以使用默认路由,有时候,可以自定义路由机制。

以下内容摘自:http://www.cnblogs.com/lzhp/archive/2013/04/08/3006443.html

一、使用默认值的路由:

            //配置默认的参数,当输入http://localhost:4016/Home时,就会显示Home/Index,当然可以定义两个参数
            //如果http://localhost:4016/Home/Index/?Page=1是有效的
            //如果是http://localhost:4016/Home/Index/Page=1无效
            routes.MapRoute("MyRoutes", "{controller}/{action}", new { action = "Index" });//

二、使用静态路由片段(在域名后面加上一个常量,然后接控制器和方法)

            //下面是静态url和默认的混合使用,当输入http://localhost:4016/Public/Home时,能显示出来
            routes.MapRoute("MyRoutes", "public/{controller}/{action}", new { action = "Index" });
            //也可以使用下面的静态url,http://localhost:4016/XHome
            routes.MapRoute("MyRoutes", "X{controller}/{action}", new { action = "Index" });

三、路由顺序

            //由于路由具有顺序性,当输入url,http://localhost:4016/XHome/Index。会指定到404
            routes.MapRoute("MyRoute", "{controller}/{action}",new { controller = "Home", action = "Index" });
            routes.MapRoute("", "X{controller}/{action}");

四、定义自己的变量(不仅仅限于controller和action,还可以是id)

复制代码
//ViewBag.Message = RouteData.Values["year"].ToString() + RouteData.Values["month"].ToString() + RouteData.Values["day"].ToString();
//在Index方法中加入上面的代码,在view中输出message,获取年月日
routes.MapRoute("MyRoute", "{controller}/{action}/{year}/{month}/{day}",new { controller = "Home", action = "Index", year = "2013"
,month="04",day="17" });
复制代码

 五、定义可选参数

            //最后一个为可选参数,经常和带有默认值的action一起使用,即没有最后一个参数的话,就使用action中的默认参数
            routes.MapRoute("MyRoute", "{controller}/{action}/{id}", new { controller="Home",action="Index",id=UrlParameter.Optional});

六、指定命名空间

复制代码
            //当有两个不同命名空间,但controller名却相同时,为路由指定优先的命名空间,以找到合适的controller
       //最后面一个参数是数组,表示一个范围,不代表查找先后次序。如果是数组中加入的是具有相同的controller,那么不能解决controller冲突
routes.MapRoute("MyRoute", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional },
          new[] { "RoutesDemo.Controllers" });
复制代码
posted @ 2011-07-18 16:39  365lei  阅读(3413)  评论(0编辑  收藏  举报