0

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

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

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

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

我可以在 Guid 中传递我想要显示的位置,但这完全是 FUGLY。我真的很想看到地址栏中显示的 URL,并在页面中链接为:localhost/Location/Paris

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

我真的需要一些帮助,不仅是为了解决我眼前的问题,也是为了更好地理解一般的路由。我以为我对它的处理足以满足我的需要,但显然,我没有。

提前致谢!

4

1 回答 1

2

您必须在 URL 中添加一些内容以消除法国巴黎和德克萨斯州巴黎之间的歧义。

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