MVC 3路由混淆

时间:2012-04-16 23:56:01

标签: asp.net-mvc-3 routing guid

好的,我一直在查看MVC 3路由问题/答案的代表性样本,我回答了80%的问题。一件好事,但现在最困难的部分仍未解决。

在我的世界里,我有一个URL localhost / Location / Guid

很好,基于我在默认路线之前输入的路线:

routes.MapRoute(
    "Location",
    "Location/{id}",
    new { controller = "Location", action = "Details", id = System.Guid.Empty }
);

我可以通过Guid传递我想要显示的位置,但是这个位于右下方。我真的很想看到地址栏中显示的URL,并在页面中链接为:localhost / Location / Paris

显然,我可以将参数更改为字符串并传入“巴黎”,但我不明白如何让数据库了解我想要巴黎,法国而不是巴黎,德克萨斯而不使用Guid

我真的需要一些帮助,不仅要解决我的问题,还要更好地理解路由。我认为我已经掌握了足够的需求,但显然,我没有。

提前致谢!

1 个答案:

答案 0 :(得分:2)

您将不得不在URL中添加一些内容,以消除巴黎,法国和德国巴黎之间的歧义。

  1. 您可以将路线模式设置为“/ Location / {country} / {region} / {city}”,或者您可以对应用中的每个可能位置进行细化。
  2. 使用这些位置slu :: /Location/{locationSlug}。如果您有多个名为“Paris”的位置,则对它们进行细分,并在末尾附加一个自动递增的#(例如/ Location / paris,/ Location / paris-1,/ Location / paris-2)。或者您可以将区域/城市/国家/地区信息添加到slug中以消除歧义,而不是#。
  3. 堆叠溢出问题样式,你有一个ID,然后是位置slug。如果您能够将GUID转换或映射到整数,它看起来更漂亮,更简洁,因此您的模式将如下所示:Location/{id}/{locationSlug}(例如/ Location / 1245 / paris)。