【问题标题】:.NET MVC Category Tree URL Structure.NET MVC 类别树 URL 结构
【发布时间】:2014-03-02 06:43:14
【问题描述】:

在浏览类别时,我的 URL 外观出现了一些问题。

基本上,这是某种餐饮应用程序,用户选择Town(顶级类别),然后选择Restaurant 对应town,在restaurant 中,他可以看到food

我有TownViewControllerRestaurantViewControllerFoodViewController 和处理TownRestaurantFood 表示的主要操作是View(所以在每个控制器中)。

查看我拥有www.catering.com/Town 的所有城镇,这很好(尽管如果它的 /Towns 没有将控制器重命名为 Towns 也没有硬编码新路线会更好 - 如果可能的话)

要查看所选城镇的所有餐厅(在本例中 ID=1),我有 www.catering.com/Restaurant/View/1。现在这里有问题。这实际上应该是选择餐厅并表示食物时的路线,对于餐厅表示应该是www.catering.com/Town/View/1。所以实际上总是超级类别应该在 URL 中。

因为最后我有www.catering.com/Food/View/1,这没有任何意义,因为我查看的是餐厅而不是 id=1 的食物。

除了经典的路由硬编码之外,还有什么方法可以解决这个问题吗?我设法用一些硬编码的路线解决了这个问题,但我的客户说这不是一个好方法,因为它在更大的项目中会变得非常混乱。

我已经这样做了:

    routes.MapRoute(
        "Restaurant",
        "Town/View/{id}",
        new { controller = "Restaurant", action = "View", id = UrlParameter.Optional }
    );

    routes.MapRoute(
        "Food",
        "Restaurant/View/{id}",
        new { controller = "Food", action = "View", id = UrlParameter.Optional }
    );

【问题讨论】:

    标签: .net asp.net-mvc url asp.net-mvc-routing categories


    【解决方案1】:

    您是否尝试过使用 MVC 区域来进一步细分您的网站?这是一个解释用法的链接:Walkthrough: Organizing an ASP.NET MVC Application using Areas

    【讨论】:

      【解决方案2】:

      我会建议属性路由。如果这是一个 MVC 5 项目,您只需要进入 RouteConfig.cs 并在您的 RegisterRoutes 方法中,取消注释/添加行:

      routes.MapMvcAttributeRoutes();
      

      然后,您可以使用Route 属性和RoutePrefix 属性来指定您想要的确切URL。例如:

      [RoutePrefix("Town/View/{townId}")]
      public class RestaurantController
      {
          [Route("")]
          public ActionResult Index(int townId)
          {
              ...
          }
      }
      

      如果你没有运行 MVC 5,你可以添加 nuget 包,AttributeRouting。语法类似,但略有不同。不是使用Route,而是使用基于 HTTP 方法的几个属性:

      [RoutePrefix("Town/View/{townId}")]
      public class RestaurantController
      {
          [GET("")]
          public ActionResult Index(int townId)
          {
              ...
          }
      }
      

      【讨论】:

      • 感谢您的回答,我一到电脑就测试一下。
      猜你喜欢
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      相关资源
      最近更新 更多