zoukankan      html  css  js  c++  java
  • 浅谈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" });
    复制代码
  • 相关阅读:
    频率和相位有什么关系
    DMA缓冲区乒乓操作的处理
    深入了解DSP与ARM的区别与联系
    python 里 np.array 的shape (2,)与(2,1)的分别是什么意思,区别是什么?(2020年修订)
    手写promise
    axios源码学习记录
    redux 之isPlainObject
    redux教程之源码解析3applyMiddleware(分析在注释中)
    redux教程之源码解析2 combineReducers(分析在注释中)
    redux教程之源码解析createStore
  • 原文地址:https://www.cnblogs.com/lei2007/p/2109698.html
Copyright © 2011-2022 走看看