在ASP.NET WebForms(说实话,HTML)中,我们可以引用文件夹中的页面。EG,我的结构可能是(仅关于文件夹)
root-> MyProductsFolder->鞋子->女士
我的网站会显示
www.mysite.com/MyProducts/Shoes/Ladies/Page.aspx
在MVC中,我们使用一个控制器,看来我们只能拥有1级(文件夹)的深度。这是正确的吗?
不使用URL重写,是否有可能
www.mysite.com/MyProducts/Shoes/Ladies/Page
我认为唯一的方法是在控制器中,但是我无法创建一个名为Shoes / Ladies的控制器
您可以使用MVC路由创建此URL。通常在AppStart> RouteConfig.cs类中找到您的路由表。您可以使用路由表为控制器中的操作创建URL映射。
假设MyProducts是您的控制器,而Shoes,Ladies是您要接受的变量,则可以执行以下操作:
routes.MapRoute("MyProducts",
"MyProducts/{category}/{subcategory}/Page",
new { controller = "MyProducts", action = "Index" });
请注意,您的路由应为最具体到最不具体的顺序,因此请将此路由添加到默认路由的上方。
当您导航到/ MyProducts / Shoes / Ladies / Page时,它将映射到MyProducts控制器中的索引操作结果,并传递类别和子类别的变量,因此您的控制器看起来像
public class MyProducts : Controller
{
public ActionResult Index(string category, string subcategory)
{
//Do something with your variables here.
return View();
}
}
如果我的假设是错误的,那么您只想为该URL返回一个视图,那么您的路线将如下所示:
routes.MapRoute("MyProducts", "MyProducts/Shoes/Ladies/Page", new { controller = "MyProducts", action = "LadiesShoes" });
和您的控制器:
public class MyProducts : Controller
{
public ActionResult LadiesShoes()
{
//Do something with your variables here.
return View();
}
}
如果需要,您可以安全地省略URL上的最后一个“ / page”。
如果我没有用上面的示例介绍您的确切情况,请告诉我,我将扩展答案。
更新
如果需要,您仍然可以将视图放置在views文件夹下的文件夹结构中,然后在控制器中引用视图文件的位置-在以下示例中,将名为Index.cshtml的视图文件放置在Views / Shoes / Ladies /文件夹中:
public class MyProducts : Controller
{
public ActionResult LadiesShoes()
{
//Do something with your variables here.
return View("~/Views/Shoes/Ladies/Index.cshtml");
}
public ActionResult MensShoes()
{
//Do something with your variables here.
return View("~/Views/Shoes/Mens/Index.cshtml");
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句