2010-08-01 110 views
1

我在我的MVC应用程序映射两种途径:我应该如何解决ASP.Net MVC路由映射冲突?

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

    routes.MapRoute(
     "Default",            // Route name 
     "{controller}/{action}/{id}",       // URL with parameters 
     new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
    ); 

} 

在大多数情况下,这些不构成问题,但我做的罢工麻烦试图调用/帐号/ LogOn支持视图时。我的ActionLink的语法看起来像这样(我试过几个变化,包括空路由值和这样):

<%= Html.ActionLink("Log On", "LogOn", "Account") %> 

浏览这个观点提出了一个404错误(“资源无法找到”)。理想情况下,我想避免大量返工,那么避免这些冲突的最佳方法是什么?

回答

1

您是否尝试过使用控制器文字的这种变体?

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

    routes.MapRoute(
     "Default",            // Route name 
     "{controller}/{action}/{id}",       // URL with parameters 
     new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
    ); 
} 

这会赶上:http://localhost/Project/12和​​和http://localhost/Project/2/View/2

但它会通过http://localhost/Account/LogOn到第二rounte。是?

+0

Gaaa!这总是最简单,最明显的答案。这是做到了。谢谢。 – 2010-08-02 12:25:55