【问题标题】:ASP.net MVC 4 Routing and optional parameters unexpected resultASP.net MVC 4 路由和可选参数意外结果
【发布时间】:2013-03-28 19:59:49
【问题描述】:

这是我的路线,唯一需要的参数是控制器

        routes.MapRoute(
            "countryoptional/controller",
            "{country}/{controller}/{pagelabel}/{page}",
            new { action = "index", country = UrlParameter.Optional,  pagelabel = UrlParameter.Optional, page = UrlParameter.Optional },
            new
            {
                pays = @"$|^(france|belgium)$",
                controller = @"^(car|boat)$",
                pagelabel = @"^$|page",
                page = @"^$|\d{1,6}"
            }
        );

我希望以下 URL 可以使用:

/汽车/

/汽车/页面/2

/法国/汽车

/法国/汽车/page/2

它有点工作:

Url.Action("index", "car", new { country= "france", pagelabel = "page", page = 2} )

将产生:/france/car/page/2

但是

如果我想要一个没有国家/地区的 url,视图操作会响应,但构造函数如

Url.Action("index", "car", new { pagelabel = "page", page = 2} )

将生成此链接://car/page/2

我得到了这个双斜杠“//car”,所以它当然会破坏链接。

我怀疑它不喜欢 {country}/{controller}/... url 定义中控制器可选前面的 {country} 参数的可能性 我不想使我的路线配置复杂化并有另一个路线声明 一定有办法,我做错了什么?

【问题讨论】:

  • 在您的可选参数中,您有支付而不是国家。我不确定这是否会有所不同。
  • 我不太擅长正则表达式,但我相信您正在添加一个约束条件,以确保该国家/地区是法国或比利时。因此,当您不提供时,它不会设置国家/地区的值。

标签: c# asp.net-mvc asp.net-mvc-routing


【解决方案1】:

可选参数必须跟在任何必需参数之后。据我所知,没有办法解决这个问题。同样的限制适用于其他任何地方(您的方法定义等)。

只需重复该路线,其中一条带有所需国家,另一条不带任何国家。 MVC 将确定使用哪一个。

【讨论】:

  • "可选参数必须跟在任何必需参数之后。"我不知道那个规则,我想这回答了这个问题,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 2014-03-19
  • 2014-10-13
  • 1970-01-01
  • 2013-11-06
  • 2011-04-08
相关资源
最近更新 更多