2011-11-03 51 views
1

超級簡單的MVC站點,帶有一個Area來處理移動設備。除了需要參數的視圖外,我所有的Area路由都可以正常工作。路由 - 區域控制器/查看參數

在「正常」網站我有一個視圖視頻頁面,需要一個參數。

mysite.com/Video/123456

這很好用。在我的Area中針對移動內容進行了一些爭鬥之後,我甚至在Controller和View中使用完全相同的代碼/標記。因此,我想到的是,以下網址:

mysite.com/Mobile/Video/123456

會妥善解決。它沒有。我得到了404(未找到)。如果我參加了參數關:

mysite.com/Mobile/Video

它解決了正常。

我相信這肯定是我在路由中做錯了。以下是我的global.asax中的相應部分。任何幫助,將不勝感激。

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

     routes.MapRoute( 
      "Video", // Route name 
      "Video/{id}", // URL with parameters 
      new { controller = "Video", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
      new string[] { "mysite.Controllers.VideoController" } 
     ); 

     routes.MapRoute( 
      "NewsItem", // Route name 
      "NewsItem/{id}", // URL with parameters 
      new { controller = "NewsItem", 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 
      new string[] { "mysite.Controllers.HomeController" } 
     ); 

     routes.MapRoute( 
      "Mobile", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { area = "Mobile", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
      new string[] { "mysite.Areas.Mobile.Controllers.HomeController" } 
     ); 

     routes.MapRoute( 
      "Mobile/Video", // Route name 
      "Mobile/Video/{id}", // URL with parameters 
      new { area = "Mobile", controller = "Video", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
      new string[] { "mysite.Areas.Mobile.Controllers.VideoController" } 
     ); 
    } 
+0

你在Global.asax中嘗試註冊方面:上MobileAreaRegistration

public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Video", // Route name "Video/{id}", // URL with parameters new { controller = "Video", action = "Index", id = UrlParameter.Optional }, // Parameter defaults new string[] { "mysite.Controllers.VideoController" } ); //newsitem route } 

註冊? – wnascimento

+0

是的,上面的代碼片段來自我的global.asax。我也在我的MobileAreaRegistration.cs文件中註冊路由。 – SteveInTN

+0

context.MapRoute( 「Mobile_default」, 「Mobile/{controller}/{action}/{id}」, new {action =「Index」,id = UrlParameter.Optional} ); – SteveInTN

回答

1

SteveInTN,在Global.asax和MobileAreaRegistration.cs中都不能有相同的註冊。

您只需在MobileAreaRegistration.cs上進行Mobile Registration,並在RegisterRoutes(RouteTable.Routes)之前調用Application_Start中的AreaRegistration.RegisterAllAreas()。

如果您想要url類似mysite.com/Mobile/Video/123456: 移動路由註冊應採用格式{controller}/{id},如視頻路由。

登記在Global.asax中:

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Mobile_default", 
      "Mobile/{controller}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
+0

好的,我沒有在兩者中進行相同的註冊,並確認我在我的global.asax中調用了RegisterAllAreas()。我從global.asax中刪除了我的Mobile AREA中的所有註冊路由。除了當我嘗試將ID傳遞到移動領域的視頻頁面時,我的所有路線仍然很好。例如,路由mobile/video/23079(號碼是ID)返回「未找到資源」,但移動/視頻正確解析。 – SteveInTN

+0

如果您要導航到mysite.com/mobile/videos/13,請從移動路線中刪除{action}。移動路線必須是{控制器}/{id},就像您的視頻路線一樣。 – wnascimento

+0

你搖滾wnascimento! – SteveInTN

0

看起來像您的路由名稱不應該包含/因爲它可能與路由衝突?當我進行路由時,我確保名稱是唯一的,並使用下劃線來表示分隔符,如下所示:text_text。不知道這是否會奏效,值得一試。

+0

盧卡斯,我刪除了/從我的手機/視頻路由名稱,並將其更改爲Mobile_Video。仍然沒有幫助。 – SteveInTN