ASP.NET MVC子目录

时间:2011-06-22 00:20:31

标签: c# asp.net asp.net-mvc visual-studio-2008 routing

我仍然是MVC的新手,所以我希望这很简单。

我需要类别和子类别,可能有多个级别,我正在尝试适当地组织我的项目。现在我正在VS2008中使用开箱即用的MVC项目。

例如,假设我要导航到: http://mysite.com/Products/Electronics/Computers/Laptops

我可以通过在我的Controllers目录中放置一个LaptopsController,在我的Views中使用各种aspx文件的Latops目录,并在我的Global.asax类中添加一行来将此特定路由映射到相应的控制器来实现此目的。

但我希望有一种方法可以自动映射路线,同时保持目录结构在项目中清洁和有条理,因为会有很多不同的类别和产品。理想情况下,我的项目中应该有控制器和视图的物理目录,对应于URL路径中的“目录”。但我似乎无法做到这一点。

我看了几篇关于为你的路由做主要定制的文章,但是如果可能的话,我不愿意。这似乎是内置的东西,所以也许我只是遗漏了一些东西。

如果你能指出我正确的方向,那就太棒了。

2 个答案:

答案 0 :(得分:5)

您很可能不需要LaptopsController,只需要ProductsController。在这种情况下,Electronics/Computers/Laptops只会告诉ProductsController要显示的产品类别(通过路线值)。

答案 1 :(得分:0)

如果您遇到路由问题,请尝试使用Haacked路由调试器。

http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx

如果您想捕获所有产品信息并获取内容,您可以执行以下操作:

    routes.MapRoute("Products", "products/{*params}", 
                    new { controller = "Product",  action = "Details", params= "" });


   public ActionResult Details(string params) 
   {     
           // Split the params with '/' as delimiter. 
           string [] productParams = params.Split('/');
           if(productParams.Lengh > 0)
           {
             var category = productParams.Length > 0 ? productParams[0]: null;
             var subCategory = productParams.Length > 1 ? productParams[1]: null;
             var detailModel //get model information and build return..

             ViewData.Model = detailModel; 
             Return View("Details");
           }
           Return View("Error");

          //etc.



   }