2012-02-28 106 views
0

我有这些路线:区域路线被忽略?

routes.MapRoute(
    "Advertisers", 
    "advertisers/{controller}/{action}/{id}", 
    new { controller = "Index", action = "Index", id = UrlParameter.Optional }, 
    new string[] { "Portal.Areas.Advertisers.Controllers" } 
); 

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

然而,每当我去/广告/控制器/操作/ ID它不读取ID参数......我究竟做错了什么?

感谢

回答

1

我建议你看一看的Route Debugger

的NuGet安装

PM>安装,包装routedebugger

后,你已经将它安装到您的项目中,将这一行代码放入您的应用程序中rt方法,并打到你正在调试的网址。

protected void Application_Start() 
{ 
    RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes); 
} 

这将告诉你到底为什么你的路线不按预期工作。

至于你的实际问题,你的Controller实际上是IndexController?因为这似乎不是我的权利

public class IndexController : Controller 
{ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

} 

我的假设是,你实际上有类似HomeControllerAdvertiserController,如果是那样的话,你应该有这样的事情

routes.MapRoute(
    "advertisers_default", // Route name 
    "advertisers/{controller}/{action}/{id}/{advertiserName}", // URL with parameters 
    new { controller = "Home", 
      action = "Index", 
      advertiserName = UrlParameter.Optional }, 
    new { id = "[0-9]+", 
      controller = "[a-zA-Z]+", 
      action = "[a-zA-Z]+" } 
); 

,然后打网址http://example.com/advertisers/ {ID}/{广告客户名称}

简单地说,这个网址看起来我错了

/广告/控制器/动作/ {ID}

应该
/广告/家庭/(编号)

甚至
/广告/家庭/ {ID}/{advertiser-name}

+0

感谢调试器很好,它似乎让我做我需要做的事情。 – Darren 2012-02-29 17:23:31

+0

没问题。这是确保MVC路线建设的最佳工具之一。 – 2012-02-29 18:44:36