2010-01-13 121 views
1

我正在学习MVC,我需要理解为什么它不能以它应该的方式工作。MVC路由问题

这里是我的路由:

public static void RegisterRoutes(RouteCollection routes) 
    { 

     // Note: Change the URL to "{controller}.mvc/{action}/{id}" to enable 
     //  automatic support on IIS6 and IIS7 classic mode 

     //http://localhost/store/category/subcategory/product 

     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 


     routes.MapRoute(
      "Category",            // Route name 
      "store/{category}/{subcategory}",      // URL with parameters 
      new 
      { 
       controller = "Catalog", 
       action = "Index", 
       category = "Featured Items", 
       subcategory = "All Items" 
      } 
     ); 


     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" }, // Parameter defaults 
      new { controller = @"[^\.]*" }       // Parameter constraints 
     ); 


    } 

我明白路由我应该看到下面的网址,当我启动Web应用程序的方式:

的http:/本地主机/存储/

什么我得到的是第二条路线......

此外,如果我将第二条路线更改为“home/{action}/{id},它不会捕获任何路线。”

你能帮我理解这个吗..谢谢

回答

0

路由不指定默认的URL;默认网址由您的应用处理。路由指定当它看到http://localhost/store/bikes/mountain时,它将使用目录控制器。但是这并没有指定默认的URL;你必须在项目属性中输入它。

我建议不要更改第二个,因为除非您正在为所有控制器创建分组,所以最好具有默认值,以便您可以捕获所有URL。您切换到第二个将要求网址为:

http://localhost/home/home/index匹配的HomeController的指标作用,而默认设置捕捉http://localhost/home/index ...

这是否有意义?