2011-12-23 74 views
5

我有一個默認的C#MVC路線:像C#MVC路由 - 多種途徑

routes.MapRoute(

    "Default", 

    "{controller}/{action}/{id}" 

    new { controller = "Home", action = "Index", id = "Welcome" } 

); 

現在我會網址:

mysite.com/Home/Index/Page1 
mysite.com/Home/Index/Page2 
mysite.com/Home/Index/Page3 
mysite.com/Account/Login 
mysite.com/Account/Etc 

但我想有第一套具有較短網址,如:

mysite.com/Page1 
mysite.com/Page2 
mysite.com/Page3 
mysite.com/Account/Login 
mysite.com/Account/Etc 

我預想的代碼是非常簡單的,如:

routes.MapRoute(

    "Shorturl", 

    "{id}", 

    new { controller = "Home", action = "Index", id = "Welcome" } 

); 

routes.MapRoute(

    "Default", 

    "{controller}/{action}/{id}" 

    new { controller = "Home", action = "Index", id = "Welcome" } 

); 

但這並不奏效。它只會走第一條路線,忘記第二條路線。 當只有一個參數(如 mysite.com/Page1)時,如何讓程序採用第一條路線,並在有多條路線(如mysite.com/Account/Login)時採用第二條路線?

編輯: 我可以這樣做:

routes.MapRoute("Short", "short/{id}", new { controller = "Home", action = "Indx", id = "Page1" }); 

但後來我將有一個醜陋的URL 「短/」。 我可以解決這個問題:

routes.MapRoute("Page1", "Page1", new { controller = "Home", action = "Index", id = "Page1" }); 

但後來我需要手動添加每個新頁......

+0

http://stackoverflow.com/questions/2975642/routing-in-asp-net-mvc-2-0 – CodeCaster 2011-12-23 09:55:38

回答

3

你可能想嘗試這樣的事情。

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Short", // Route name 
      "{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

    } 

確保您的默認之前將其添加到路由(或者,如果你想即使刪除默認)

,而是這些被添加的順序很重要。

有一點信息丟失,並且控制器中的Action。

public ActionResult Index(string id) 
{ 
     ViewBag.Message = "Welcome to ASP.NET MVC!"+id; 
     return View(); 
} 

希望這會有所幫助。

問候。

+0

有了這個應用程序忘記了之後添加的默認路由器,因爲他無法區分這兩條路線。這一個工程:routes.MapRoute(「短」,「短/ {id}」,新{控制器=「家」,動作=「信息」,ID =「Leermethode」});但後來我在網址中出現了醜陋的「短」。 – Paul 2011-12-23 11:44:22

+0

所以我玩了一下,嘗試以下內容 – Sitnam 2011-12-28 12:19:52

+0

因此,一旦你的頁面路徑和動作全部排序完畢,你可以做的就是從數據庫中添加你的內容,或者如果它們是硬編碼的項目,可能使用偏分量。希望這有助於多一點:$ – Sitnam 2011-12-28 12:50:59