2014-02-05 54 views
0

我有一些問題,我的網址看看經歷類別一會兒。.NET MVC分類樹URL結構

基本上,這是某種形式的餐飲應用,其中用戶選擇Town(最高類別),然後選擇Restauranttown,和裏面restaurant他可以看到food

我有TownViewControllerRestaurantViewControllerFoodViewController和用於處理的TownRestaurant表示主要動作,FoodView(所以在每一個控制器)。

,看我有www.catering.com/Town所有城鎮和多數民衆贊成罰款(雖然這將是更好的,如果不重命名控制器到城鎮,也沒有硬編碼新航線的/城鎮 - 如果可能的話)

要查看所有餐館選擇鎮(駐這個案例ID = 1)我有www.catering.com/Restaurant/View/1。現在這是問題。實際上這應該是選擇餐廳和食物代表的路線,餐館代表應該是www.catering.com/Town/View/1。所以實際上總是超類應該在URL中。

因爲在最後我有www.catering.com/Food/View/1並沒有任何意義,因爲我正在瀏覽餐廳沒有與ID = 1的食物。

是否有某種方式這可以是固定的路線,除了經典的硬編碼?我設法解決了一些硬編碼路由,但是我的客戶說它不是很好的方法,因爲它可能會在較大的項目中變得非常混亂。

我做這樣的:

routes.MapRoute(
     "Restaurant", 
     "Town/View/{id}", 
     new { controller = "Restaurant", action = "View", id = UrlParameter.Optional } 
    ); 

    routes.MapRoute(
     "Food", 
     "Restaurant/View/{id}", 
     new { controller = "Food", action = "View", id = UrlParameter.Optional } 
    ); 

回答

2

我建議屬性的路由。如果這是一個MVC 5項目,你只需要進入RouteConfig.cs在你RegisterRoutes方法,取消/添加一行:

routes.MapMvcAttributeRoutes(); 

然後,您可以使用Route屬性和RoutePrefix屬性指定的確切網址你要。例如:

[RoutePrefix("Town/View/{townId}")] 
public class RestaurantController 
{ 
    [Route("")] 
    public ActionResult Index(int townId) 
    { 
     ... 
    } 
} 

如果您未運行MVC 5,則可以添加nuget軟件包AttributeRouting。語法相似,但略有不同。而不是使用Route,您使用一個基於HTTP方法的幾個屬性:

[RoutePrefix("Town/View/{townId}")] 
public class RestaurantController 
{ 
    [GET("")] 
    public ActionResult Index(int townId) 
    { 
     ... 
    } 
} 
+0

謝謝你的回答,我會盡快檢查一下我的電腦。 –