1. <bdo id="8zfej"></bdo>
    <li id="8zfej"><meter id="8zfej"><th id="8zfej"></th></meter></li>

    南京中博教育

    全國咨詢電話:17368476151

    三分鐘了解中博教育
    當(dāng)前位置:南京中博教育 > 學(xué)習(xí)園地 > 編程技巧

    ASP-NET MVC-2

    來源:南京北大青鳥張府園校區(qū)? ? ? 作者:IT教育 ? ??

    在一個route中,通過在大括號中放一個占位符來定義( { and } )。當(dāng)解析URL的時候,符號"/"和"."被作為一個定義符來解析,而定義符之間的值則匹配到占位符中。route定義中不在大括號中的

    ASP.NET MVC 入門3、Routing
    本系列文章基于Microsoft ASP.NET MVC Beta.
    在一個route中,通過在大括號中放一個占位符來定義( { and } )。當(dāng)解析URL的時候,符號"/"和"."被作為一個定義符來解析,而定義符之間的值則匹配到占位符中。route定義中不在大括號中的信息則作為常量值。下面是一些示例URL:
    Valid route definitions Examples of matching URL:

    北大青鳥軟件學(xué)校職業(yè)教育

    {controller}/{action}/{id} /Products/show/beverages
    {table}/Details.aspx /Products/Details.aspx
    blog/{action}/{entry} /blog/show/123
    {reporttype}/{year}/{month}/{day} /sales/2008/1/5
     通常,我們在Global.asax文件中的Application_Start事件中添加routes,這確保routes在程序啟動的時候就可用,而且也允許在你進(jìn)行單元測試的時候直接調(diào)用該方法。如果你想在單元測試的時候直接調(diào)用它,注冊該routes的方法必需是靜態(tài)的同時有一個RouteCollection參數(shù)。下面的示例是Global.asax中的代碼,演示了添加一個包含兩個URL參數(shù)action 和 categoryName的Route對象:

    public static void RegisterRoutes(RouteCollection routes){    //忽略對.axd文件的Route,也就是和WebForm一樣直接去訪問.axd文件    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");     routes.MapRoute(        "Category",                                              // Route 的名稱        "Category/{action}/{categoryName}",                           // 帶有參數(shù)的URL        new { controller = "Category", action = "Index", categoryName = "4mvc" }  // 設(shè)置默認(rèn)的參數(shù)    ); } protected void Application_Start(){    //在程序啟動的時候注冊我們前面定義的Route規(guī)則    RegisterRoutes(RouteTable.Routes);}

    更多文章請參考:
    ?  System.Web.Routing入門及進(jìn)階 下篇 By 重典
    ?  System.Web.Routing入門及進(jìn)階 上篇 By 重典
    ?  ASP.NET MVC URL Routing 學(xué)習(xí) By Q.Lee.lulu
    ?  ASP.NET Routing (官方文檔)
    在這里我不打算再詳細(xì)去講解。以下只是簡單的說明一下。
    忽略對某類URL的Routing:
     
        //忽略對.axd文件的Route,也就是和WebForm一樣直接去訪問.axd文件    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     
    添加約束條件,支持正則表達(dá)式。例如我們需要對id參數(shù)添加一個必須為數(shù)字的條件:
    routes.MapRoute(    "Default",                                                  "{controller}/{action}/{id}",                               new { controller = "Home", action = "Index", id = "" },      new { id = @"[d]*" } //id必須為數(shù)字); 
     
    使用星號(*)匹配不確定個數(shù)的參數(shù),這會匹配URL后面所有的剩余的參數(shù)。例如:
    query/{queryname}/{*queryvalues}
    對于url:query/aspnetmvc/preview5/routing ,則queryvalues參數(shù)匹配的參數(shù)為 preview5/routing。
    url匹配Route是根據(jù)Route的定義順序來自上而下匹配的。例如我們定義兩個Route:

    public static void RegisterRoutes(RouteCollection routes){    routes.MapRoute(        "Default",                                              // Route 的名稱        "{controller}/{action}/{id}",                           // 帶有參數(shù)的URL        new { controller = "Home", action = "Index", id = "" }  // 設(shè)置默認(rèn)的參數(shù)    );    routes.MapRoute(        "Post",        "Post/{id}",        new { controller = "Post", action = "Index", id = "" }    );} 

    不知你看出上面定義的兩個Route有什么問題沒有?我想你看出來了,URL永遠(yuǎn)都匹配不了第二個Route,也就是名為Post的Route,因?yàn)槟芷ヅ涞诙€Route的url一樣也能匹配第一個Route,而url匹配Route是根據(jù)Route的定義順序來自上而下匹配的,所以URL永遠(yuǎn)都匹配不了第二個Route。所以,在定義Route的時候,要將一些特別的Route放到前面。
    如果你要將ASP.NET MVC部署到IIS6下面,由于IIS6對于http://blog.51mvc.com/index這類沒有擴(kuò)展名的URL是不會交由ASP.NET的aspnet_isapi.dll處理的,所以你的ASP.NET MVC程序部署到IIS6的時候可能會出現(xiàn)404錯誤。你可以為你的ASP.NET MVC站點(diǎn)添加一個通配符:
     

    北大青鳥軟件學(xué)校職業(yè)教育

    然后點(diǎn)擊"通配符應(yīng)用程序映射"下的"插入"按鈕,在彈出的對話框中如下設(shè)置:

    北大青鳥軟件學(xué)校職業(yè)教育

    你如果擔(dān)心添加通配符會給出現(xiàn)性能上的問題,那么你可以修改Route為帶擴(kuò)展名的,這個擴(kuò)展名是完全由你自己定義的,例如我們使用4mvc來做url的擴(kuò)展名:
    routes.MapRoute(    "Default",                                              // Route 的名稱    "{controller}.4mvc/{action}/{id}",                           // 帶有參數(shù)的URL    new { controller = "Home", action = "Index", id = "" }  // 設(shè)置默認(rèn)的參數(shù)); 
     
    然后再在IIS6中添加這個擴(kuò)展名的映射:

    北大青鳥軟件學(xué)校職業(yè)教育

    然后我們訪問的URL類似于:http://blog.51mvc.com/Home.4mvc/index
    群上有些朋友說希望教程能根據(jù)一個示例程序來寫,那樣更容易他們的學(xué)習(xí)。所以這里就寫一個Blog的示例程序,為了方便,Model就直接使用Blogengine的業(yè)務(wù)實(shí)體部分。在這里我們先定義這個blog的Route:
    BlogRoutepublic static void RegisterRoutes(RouteCollection routes){    //忽略對.axd文件的Route,也就是和WebForm一樣直接去訪問.axd文件    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");     routes.MapRoute(        "Admin",        "Admin/{action}",        new { controller = "Admin", action = "Index" }    );     routes.MapRoute(        "PostById",        "Post/{id}",        new { controller = "Home", action = "Post", id = "" },        new { id = @"[d]+" }    );     routes.MapRoute(        "PostBySlug",        "Post/{slug}",        new { controller = "Home", action = "Post" }    );     routes.MapRoute(        "Default",                                              // Route 的名稱        "{controller}/{action}/{id}",                           // 帶有參數(shù)的URL        new { controller = "Home", action = "Index", id = "" }  // 設(shè)置默認(rèn)的參數(shù)    ); } 
     


    分享到:
    近期文章

    搶試聽名額

    名額僅剩66名

    教育改變生活

    WE CHANGE LIVES

    主站蜘蛛池模板: 热综合一本伊人久久精品| 中文自拍日本综合| 一本色道久久综合一区| 99久久综合狠狠综合久久aⅴ| 色天使亚洲综合一区二区| 卡通动漫第一页综合专区| 狠狠色狠狠色综合久久| 色综合久久天天影视网| 欧美日韩综合一区二区三区| 色综合天天综合网国产成人网| AV狠狠色丁香婷婷综合久久| 亚洲色偷偷狠狠综合网| 狠狠色丁香婷婷久久综合五月| 一本色道久久88综合日韩精品| 伊人yinren6综合网色狠狠| 东京热TOKYO综合久久精品| 国产综合久久久久鬼色| 婷婷色中文字幕综合在线| 久久综合88熟人妻| 久久综合五月婷婷| 久久99国产综合色| 亚洲综合一区二区精品导航| 国产性天天综合网| 色老头综合免费视频| 色噜噜狠狠色综合中文字幕 | 热久久综合这里只有精品电影| 99久久综合给久久精品| 久久婷婷丁香五月综合五| 青青青伊人色综合久久| 色综合天天综合高清网| 亚洲国产精品成人综合色在线婷婷 | 国产成人亚洲综合无码精品| 久久九色综合九色99伊人| 久久乐国产精品亚洲综合| 国产综合一区二区在线观看| 亚洲综合伊人久久大杳蕉| 亚洲综合视频在线| 精品综合一区二区三区| 久久综合一区二区无码| 色综合久久中文字幕无码| 色综合天天综合网国产成人|