2013-04-30 55 views
2

我在傳統ASP站點下有一個ASP.NET MVC網站。 MVC的網站是:在ASP.NET MVC中路由的問題

http://www.inrix.com/traffic

的路由

http://www.inrix.com/traffic
http://www.inrix.com/traffic/home
http://www.inrix.com/traffic/features

做工精細。然而,路線:

http://www.inrix.com/traffic/support

沒有。點擊它可以看到我所得到的。如果我有動作:

http://www.inrix.com/traffic/support/index

它的工作原理。

當我在VS中按F5在家中運行這個功能時,只需http://www.inrix.com/traffic/support(即沒有指定動作)就可以正常工作。這裏是我的路線:

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

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

    routes.MapRoute(
     "Default", 
     "{controller}/{action}/{id}", 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

    routes.MapRoute(
     "ThankYou", 
     "{controller}/{action}/{email}/{id}" 
     ); 
} 

www.inrix.com/traffic maps to HomeController(Index action)。

我希望www.inrix.com/traffic/support能夠映射到SupportController,Index操作。

「支持」路線發生了什麼?

附加代碼:

控制器:

using System.Web.Mvc; 

namespace InrixTraffic.Controllers 
{ 
    public class SupportController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 
    } 
} 

查看:

@{ 
    Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Support</title> 
</head> 
    <body> 
     <h1>Hello!</h1> 
    </body> 
</html> 

新航線:

routes.MapRoute(
     "Support", 
     "traffic/support", 
     new { controller = "Support", action = "Index" } 
     ); 

回答

2

@EDIT: 我覺得你有相同的URL中的文件路徑(文件夾可能)。我的意思是,一個名爲「支持」的文件夾。 爲了覆蓋使用的路由路徑文件路徑,您需要添加:

routes.RouteExistingFiles = true; 
+0

你對在本地主機上運行調試的F5是正確的。 查看帖子的末尾以澄清您的問題。 – birdus 2013-05-01 20:19:30

+0

不,我該怎麼做? – birdus 2013-05-01 21:02:23

+0

@birdus,請檢查我的更新答案,並刪除以前的評論,以便討論簡單。希望工程。 – 2013-05-01 23:08:36

1

你有一個索引行動的交通控制器?如果是這樣,我認爲你需要建立什麼樣如下所示途徑:

routes.MapRoute(
    "Terms", 
    "traffic/support", 
    new { controller = "Traffic", action = "Index" } 
    ); 

放置在你的的RegisterRoutes方法的條款的路線上面這條路線。

編輯

我想設置我的路線是這樣的:

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

    routes.MapRoute(
     "Support", 
     "traffic/support", 
     new { controller = "Support", action = "Index" } 
    ); 

    // don't know why you need the id at the end 
    routes.MapRoute(
     "Terms", 
     "terms", 
     new { controller = "Terms", action = "Index" } 
     ); 

    routes.MapRoute(
     "Default", 
     "{controller}/{action}/{id}", 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

    // why does this route not have any defaults defined? 
    routes.MapRoute(
     "ThankYou", 
     "{controller}/{action}/{email}/{id}" 
     ); 
} 
+0

交通實際上去HomeController的。 SupportController.Index是我想要這個URL去的地方。我在問題的底部澄清了這一點。 – birdus 2013-05-01 20:21:51

+0

所以你要添加這個路由,而不是'routes.MapRoute( 「條款」, 「交通/支」, 新{控制器= 「支持」,行動= 「索引」} );' – wellers 2013-05-01 20:38:20

+0

的原因,你的' traffic/support'路由不匹配是因爲您的默認路由將使用「支持」操作查找TrafficController。您需要在RegisterRoutes方法的Default路由之前放置上述路由。 – wellers 2013-05-01 20:55:13