【问题标题】:mvc routing examples for categories and sub-categories类别和子类别的 mvc 路由示例
【发布时间】:2011-03-15 19:37:29
【问题描述】:

我有一个静态网站(没有数据库),我很难理解如何为子类别设置路线。例如,我可以执行以下操作,其中 category 是控制器,make 是动作:

  • 汽车/丰田
  • 汽车/bwm

但是当我添加另一个级别时,我不知道如何设置路线

  • 汽车/丰田/凯美瑞
  • 汽车/丰田/卡罗拉
  • 汽车/丰田/celica

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-2 routing


    【解决方案1】:

    我可能会选择年份/品牌/型号

    routes.MapRoute(
       "Default",
       "{controller}/{year}/{make}/{model}"
       new
       {
           controller = "car", 
           action = "search",
           year = DateTime.Today.Year,
           model = "all",
           make = Url.OptionalParameter
       }
    );
    

    (您可能希望对年份进行约束以使其成为合理值?)

    使用类似的控制器

    public class CarController 
    {
    
        public ActionResult Search( int year, string make, string model )
        {
             // handle model "all" and empty "make" specially
        }
    }
    

    【讨论】:

      【解决方案2】:

      您应该可以接受如下所示的路线:

      routes.MapRoute(
         "CarsRoute",
         "cars/{make}/{model}",
         new { 
            controller = "Cars", 
            action = "Display", 
            make = UrlParameter.Optional, 
            model = UrlParameter.Optional 
         });
      

      这将映射到带有签名的操作方法:

      public ActionResult Display(string make, string model)
      

      makemodel 都可以为空。然后您就可以执行您的操作了。

      【讨论】:

      • MVC3 不能很好地处理带有多个可选参数的路由,两者之一应该有一个默认值。如果 OP 使用或升级到 MVC3,这将有所帮助。当您尝试使用它来生成路线时,问题就出现了;它失败了。
      • 是的,make 很可能有一个默认值。
      猜你喜欢
      • 1970-01-01
      • 2013-08-14
      • 2020-12-28
      • 2013-05-28
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多