在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的控制器
答案 0 :(得分:2)
您可以使用MVC路由创建此URL。您的路由表通常位于 AppStart>中。 RouteConfig.cs 类。您可以使用路由表为控制器中的操作创建URL映射。
假设MyProducts是你的控制器,鞋子,女士们是你想接受的变量,你可以这样做:
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();
}
}
如果我的推定错误,您想要为该网址返回一个视图,您的路线将如下所示:
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 /中女士/文件夹:
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");
}
}
答案 1 :(得分:0)
您可以使用Attribute Routing定义每个操作的网址,如下所示。
<table id="totais_ano">
<tr>
<th>TProd</th>
<th>TVend</th>
<th>TMax</th>
<th>TPass</th>
</tr>
<tr>
<td id="tot_prod"><?php echo $total_prod; ?></td>
<td id="tot_vend"><?php echo $total_vend; ?></td>
<td id="tot_max"><?php echo $total_max; ?></td>
<td id="tot_vend_passado"><?php echo $total_pass; ?></td>
</tr>
</table>
路由属性提供灵活性和更好的代码组织。您可以在同一位置检查路线定义。