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路径中的"目录"相对应。但我似乎无法做到这一点。
我看过几篇关于对路由进行重大定制的文章,但如果可能的话,我宁愿不这样做。这似乎是内置的东西,所以也许我只是错过了一些东西。
如果你能给我指明正确的方向,那就太棒了。
很可能您不需要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.
}