ASP.NET MVC subdirectories

本文关键字:subdirectories MVC NET ASP | 更新日期: 2023-09-27 18:00:13

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

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

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

我可以通过将一个LaptosController放在Controllers目录中,在Latops目录中的Views中包含各种aspx文件,并在Global.asax类中添加一行将此特定路由映射到适当的控制器来实现这一点。

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

我看过几篇关于对路由进行重大定制的文章,但如果可能的话,我宁愿不这样做。这似乎是内置的东西,所以也许我只是错过了一些东西。

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

ASP.NET MVC subdirectories

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

如果您在路由方面遇到问题,请尝试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.

   }