首页 技术 正文
技术 2022年11月23日
0 收藏 571 点赞 3,501 浏览 3423 个字

MVC中,用户访问的地址并不映射到服务器中对应的文件,而是映射到对应Control里对应的ActionMethod,由ActionMethod来决定返回用户什么样的信息。而把用户访问的地址对应到对应的Action(当然也可以是对应的文件)的工作有路由系统完成,这其中许多复杂的处理由.net自动完成,而开发者需要告诉.net用户的访问地址和对应Action的具体映射关系。

     MVC中路由系统可以完成两件任务:     1,处理从用户接收到得URL,映射到对应的Action;     2,将某个Action根据路由系统的映射关系,反映射成符合该路由系统结构的URL(动态生成URL,当网站结构改变时,该URL同样会自动改变);
     一,处理incoming的URL:     路由的具体映射关系是在Global.aspx文件里定义的:     public static void RegisterRoutes( RouteCollection routes)        {            routes.IgnoreRoute( “{resource}.axd/{*pathInfo}” );
            routes.MapRoute(                null,                “”,//
null route                new { controller = “Product” ,
action = “List”, category = ( string)null ,
page = 1 },                new[] { “SportsStore.WebUI.Controllers” }            );
            routes.MapRoute(                null,                “Page{page}”, //
Matches /Page2, /Page123, but not /PageXYZ                new { controller = “Product” ,
action = “List”, category = ( string)null },                new { page = @”\d+” } //
Constraints: page must be numerical            );
            routes.MapRoute(                null,                “{category}”, //
Matches /Football or /AnythingWithNoSlash                new { controller = “Product” ,
action = “List”, page = 1 }            );            routes.MapRoute(                null,                “{category}/Page{page}”, //
Matches /Football or /AnythingWithNoSlash/Page1                new { controller = “Product” ,
action = “List”, page = 1 },                new { page = @”\d+” } //
Constraints: page must be numerical            );
            routes.MapRoute(                “Default”, //
Route name                “{controller}/{action}/{id}” , //
URL with parameters                new { controller = “Product” ,
action = “List”, id = UrlParameter.Optional } // Parameter
defaults            );
        }     在系统启动时,Application_Start()方法会调用RegisterRoutes方法,开发者自定义的路由映射就在RegisterRoutes方法中。     1,自定义Route并添加到RouteTable中:     Route myRoute = new Route(“{controller}/{action}”, new MvcRouteHandler());

     routes.Add(“MyRoute”, myRoute);
     2,通过Routes.MapRoute方法(其内部仍然自定义了一个Route添加)       routes.MapRoute(                “RouteName”,                                                                           //
第一个参数指定为新建的Route的名称;                “ABC{category}/{controller}/Page{page}/DEF”, 
            //第二个参数为主要的映射关系                new { controller = “Product” ,
action = “List”, page = 1 },    // 第三个参数为默认参数,当映射不匹配时,会根据此默认参数进行Action的匹配                new { page = @”\d+” },
                                                      //第四个参数为相关限制条件,此处表示page参数必须是数字                 new {”NameSpace“}                                                              // 第五个参数为命名空间,即该路由匹配在那个命名空间下有效            );     第二个参数中, “ABC{category}/{controller}/Page{page}/DEF”,路由系统会根据此处的参数,把用户请求的URL和这里的参数进行匹配,有两种映射匹配方式:     ①动态匹配,放在{}里的,即为要匹配的参数名,比如category,controller,page,URL中,在ABC之后,第一个/之前的内容均会被匹配并”赋值“给category参数。同理,第二个/到第三个/之间的内容会被匹配为controler参数的值,即到此controller里需找对应的ActionMethod。     ②静态匹配,放在{}以外的内容,会将此处每一个字符同URL进行比较,比如ABC…/…/PAGE…./DEF     如果URL和该参数的①和②两种比较方式比均均匹配成功,则为完全匹配成功,按URL进行相应的Controller和Action进行匹配,否则,未匹配成 功的项:比如page,会按默认的参数去匹配Action,如果默认参数匹配不成功,则抛出异常
     当注册了多个RouteMap时,会按其注册的顺序,从上到下进行匹配,匹配成功后不会再查找后面的匹配。在设计路由匹配时要注意匹配的前后顺序;
     二,将对应的Action转换为URL     路由系统的第二个功能就是实现把某个Action转换为对应的URL。当然可以在代码中写静态的URL,但当网站的路由映射系统发生改变时,该静态URL需要全部修改,利用路由系统可以实现动态转换     1,生成链接:<a>     @Html.ActionLink(“About this application”, “Index”, “Home”,new {id = “myAnchorID”, @class = “myCSSClass”})第四个参数可以为生成的链接提供属性; 当提供的参数和路由系统中的参数不一致时,会生成QueryString:?..=..     2,生成URL字符串:仅仅产生URL的字符串,即href后的内容      @Html.Action(),用法同ActionLink一致。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,946
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,472
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,285
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,101
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,733
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,768