在asp.net mvc2以后的版本里面,有了area(区域的概念),这为我们开发中提供了不少方便的地方,但是很不凑巧,若是存在多个重名的controller就会发生错误,因此我们可以根据router的规则来解决这个问题。
错误提示:
我们可以根据错误提示来解决这个问题,在MapRoute方法添加namespaces参数,代码如下:
class="code_img_closed" src="/Upload/Images/2013072918/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('c74d2f81-e5ca-45da-8709-b8748b49b0f1',event)" src="/Upload/Images/2013072918/2B1B950FA3DF188F.gif" alt="" />1 public static void RegisterRoutes(RouteCollection routes) 2 { 3 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 4 5 routes.MapRoute( 6 name: "Default", 7 url: "{controller}/{action}/{id}", 8 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 9 namespaces:new []{"MvcApplication8.Controllers"} 10 ); 11 }View Code
加上命名空间后,就会按照命名空间去找相应的控制器,这个问题就解决了。
解决这个问题,我们可以使用Route对象的DataTokens属性来指定命名空间列表。DataTokens.Add()方法,我们可以理解为存储于Route对象的DataTokens属性中,对应的Key为“Namespaces”。这两个问题的解决方法有相似之处。
代码:
1 public static void RegisterRoutes(RouteCollection routes) 2 { 3 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 4 5 routes.MapRoute( 6 name: "Default", 7 url: "{controller}/{action}/{id}", 8 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 9 namespaces: new[] { "MvcApplication8.Controllers" } 10 ).DataTokens.Add("area","admin"); 11 }View Code
其中defaults里面的controller和action为area里面设置起始页面的controller和action方法。
两个问题都解决了,欢迎探讨。