2011-12-23 107 views
5

Tôi có một mặc định C# tuyến MVC:C# MVC định tuyến - nhiều tuyến đường

routes.MapRoute(

    "Default", 

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

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

); 

Bây giờ tôi sẽ nhận được các url như:

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

Nhưng tôi muốn có tập đầu tiên với một ngắn hơn url như:

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

tôi mong đợi mã để được thực sự đơn giản như:

routes.MapRoute(

    "Shorturl", 

    "{id}", 

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

); 

routes.MapRoute(

    "Default", 

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

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

); 

Nhưng điều đó không hiệu quả. Nó sẽ chỉ đi theo con đường đầu tiên và quên đi con đường thứ hai. Làm cách nào bạn có thể làm cho chương trình của mình thực hiện tuyến đường đầu tiên khi chỉ có một thông số (như mysite.com/Page1) và thực hiện tuyến đường thứ hai khi bạn có nhiều tuyến đường (như mysite.com/Account/Login)?

Edit: tôi có thể làm:

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

Nhưng sau đó tôi sẽ có một xấu xí "ngắn /" trong url. tôi có thể sửa chữa nó với:

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

Nhưng sau đó tôi cần thêm mỗi trang mới bằng tay ...

+0

http://stackoverflow.com/questions/2975642/routing-in-asp-net-mvc-2-0 – CodeCaster

Trả lời

3

Bạn có thể muốn thử một cái gì đó như thế này.

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 
     ); 

    } 

chắc chắn rằng bạn thêm video này vào con đường trước khi mặc định (hoặc thậm chí loại bỏ các mặc định nếu bạn muốn)

Nhưng thứ tự mà chúng được bổ sung rất quan trọng.

Có một chút thông tin bị thiếu và Hành động trong bộ điều khiển.

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

Hy vọng điều này sẽ hữu ích.

Trân trọng.

+0

Với ứng dụng này, hãy quên bộ định tuyến mặc định được thêm sau này vì không thể phân biệt giữa 2 tuyến. Công cụ này hoạt động: routes.MapRoute ("Short", "short/{id}", new {controller = "Home", action = "Thông tin", id = "Leermethode"}); nhưng sau đó tôi có "ngắn" xấu xí trong url. – Paul

+0

Vì vậy, tôi đã chơi với điều này một chút, hãy thử sau – Sitnam

+0

Vì vậy, khi bạn đã định tuyến và hành động của tất cả các trang, bạn có thể thêm nội dung từ DB hoặc nếu chúng là các mục được mã hóa cứng, có thể sử dụng partials. Hy vọng Điều này sẽ giúp nhiều hơn một chút: $ – Sitnam

Các vấn đề liên quan