2011-09-06 169 views
0

這裏是我的.Net MVC文件夾結構:ASP.NET MVC的URL路由映射(URL重寫)問題

screenshot

我有所謂的「區域」一個單獨的文件夾和裏面我有一個文件夾,名爲「餐廳」。 在這個「餐廳」文件夾裏面我有一個名爲「MenuController」的控制器,其名稱爲「Index」

我嘗試使用以下代碼重寫「Global.asax.cs」中的(自定義路徑映射)url。

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

但它給了我一個HTTP 404錯誤。

回答

2

路線內的控制器參數應該是控制器的名稱,而不是路徑:

如果你的控制器名稱爲Menu然後,將其更改爲這樣:

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

而另一奇怪的是:這條路線坐在你的Global.asax文件裏面嗎?它應該位於您的RestaurantAreaRegistration.cs文件中,如下所示:

public class RestaurantAreaRegistration : AreaRegistration { 

    public override string AreaName { 
     get { 
      return "Restaurant"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) { 

     context.MapRoute(
       "RestaurantMenu", // Route name 
       "Restaurant/{id}", // URL with parameters 
       new { controller = "Menu", action = "Index", id = UrlParameter.Optional } 
      // Parameter defaults 
     ); 

     context.MapRoute(
      "Accommodation_default", 
      "accomm/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 

    } 
} 

然後你可以給這個鏡頭。如果你想使用ActionLink的這個路線,使用這樣的:

@Html.ActionLink("MyLink", "Index", "Menu", new { id = 1, Area = "Restaurant"}) 

我寫上面的代碼用記事所以可能有一些錯別字:)

+0

謝謝:)救我的一天 –