我仍然是MVC的新手,所以我希望这很简单。
我需要类别和子类别,可能有多个级别,我正在尝试适当地组织我的项目。现在我正在VS2008中使用开箱即用的MVC项目。
例如,假设我要导航到: http://mysite.com/Products/Electronics/Computers/Laptops
我可以通过在我的Controllers目录中放置一个LaptopsController,在我的Views中使用各种aspx文件的Latops目录,并在我的Global.asax类中添加一行来将此特定路由映射到相应的控制器来实现此目的。
但我希望有一种方法可以自动映射路线,同时保持目录结构在项目中清洁和有条理,因为会有很多不同的类别和产品。理想情况下,我的项目中应该有控制器和视图的物理目录,对应于URL路径中的“目录”。但我似乎无法做到这一点。
我看了几篇关于为你的路由做主要定制的文章,但是如果可能的话,我不愿意。这似乎是内置的东西,所以也许我只是遗漏了一些东西。
如果你能指出我正确的方向,那就太棒了。
答案 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.
}