快速业务通道

ASP.NET MVC案例教程(基于ASP.NET MVC beta)—第三篇:ASP.NET MVC全局观

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
,第一个参数是规则名,是一个普通字符串。关键是第二个参数,它也是一个字符串,但是它描述了如何解析url。可以这样 理解,它描述了url串HostName后面部分如何匹配,其中带{}的表示参数匹配,如果不带则表示字符串匹配。

例如,上面的 {controller}/{action}/{id}表示如果HostName后面有三段由“/”分割的字符串,则这个url被匹配,并且分别被解析成控制器名 ,Action名和一个叫“id”的参数。如果你输入的是http://localhost/Home/Index/1则后面的“1”将被当做参数id的 值,但是如果你请求http://localhost/Home/Index/1/2,抱歉,你的请求无法成功,因为这条路由规则没法匹配你的url,因为你的HostName 后面有四段,而这个路由规则只能匹配三段的。

也许你还注意到一个问题,http://localhost/Home/Index明明HostName后面只有两段,怎么也被匹配了呢?这就是MapRoute方法的第三个 参数起作用了。这个参数的作用是为上面规则中各个{}匹配段设置默认值,如上,id的默认值为"",即空。所以在 http://localhost/Home/Index中,虽然没有显示指定id,但是它依然可以匹配成功,默认作为空值。如果你把其中id=""去掉,你 会发现http://localhost/Home/Index已经无法匹配了。依次类推,http://localhost/Home/也可以匹配成功,因为{action}默认是Index, http://localhost/也可以匹配成功,因为默认{controller}为Home,所以,在这条默认值下http://localhost/Home/Index和 http://localhost/是等效的。

综上分析,我们得出一条重要结论:在默认值被设置的情况下,映射规则“配少不配多”, 少的部分由默认值代替。

上面的匹配规则中,三个匹配段都带大括号的,都是参数匹配,下面我们来说说强字符串匹配。例如,我们有 一个url需要这样http://localhost/Category/Detail/Name。如果按照上面的匹配规则,Name段的值会被匹配到id中去,可是我们想在 CategoryController的Detail方法中使用名叫“name”的参数而不是使用名叫“id”的参数,怎么办呢?很简单,我们 增加一下一条匹配规则:

1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Web;
5using System.Web.Mvc;
6using System.Web.Routing;
7
8namespace MVCDemo
9{
10  // Note: For instructions on enabling IIS6 or IIS7 classic mode,
11  // visit http://go.microsoft.com/?LinkId=9394801
12
13  public class MvcApplication : System.Web.HttpApplication
14  {
15    public static void RegisterRoutes(RouteCollection routes)
16    {
17      routes.IgnoreRoute("{resource}.axd/ {*pathInfo}");
18
19      routes.MapRoute(
20        "Category",                        // Route name
21        "Category/Detail/{name}",               // URL with parameters
22        new { controller = "Category", action = "Detail", name = "" } // Parameter defaults
23      );
24
25
26      routes.MapRoute(
27         "Default",                       // Route name
28        " {controller}/{action}/{id}",              // URL with parameters
29        new { controller = "Home", action = "Index", id = "" } // Paramete

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号