MVC创建“文件夹”和子文件夹

时间:2015-05-29 10:24:00

标签: asp.net-mvc

在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的控制器

2 个答案:

答案 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>

路由属性提供灵活性和更好的代码组织。您可以在同一位置检查路线定义。