1

我对 MVC 很陌生,我正在尝试使用它建立一个新站点。出于 SEO 的原因,我们需要使页面的 url 类似于“Recruiter/4359/John_Smith”或基本上是{controller}/{id}/{name}. 当我在后面的代码中创建 url 时,我有这个工作......

//r is a recruiter object that is part of the results for the view

r.Summary = searchResult.Summary + "... <a href=\"/Recruiter/" + r.Id + "/" + r.FirstName + "_" + r.LastName + "\">Read More</a>"

但是,当我在我的视图中使用搜索结果的集合并遍历它们时,我试图创建另一个指向同一页面的链接,<%=Html.ActionLink<RecruiterController>(x => x.Detail((int)r.Id), r.RecruiterName)%> 但它不起作用。当我在视图中使用该代码时,它会以 /Recruiter/Detail/4359 的形式给我一个 url,一位同事告诉我应该使用 Html.ActionLink 在视图和控制器中创建链接,以便如果将来路线发生变化,它将自动工作。不幸的是,他不确定在这种情况下如何做到这一点。所以,我的问题是...

  1. 如何使 Html.ActionLink 在视图中工作以创建我需要的 url(如上面的 r.Summary)?
  2. 如何在控制器中使用 Html.ActionLink 而不是像上面那样对链接进行硬编码?
4

2 回答 2

1

我遇到了这篇博客文章,它让我朝着正确的方向前进。

http://www.chadmoran.com/blog/2009/4/23/optimizing-url-generation-in-aspnet-mvc-part-2.html

于 2009-10-12T14:36:08.633 回答
1

正如您的同事所说,使用 ActionLink 方法写出链接是一个好主意,这样它们将始终与您的路线相匹配。

在您当前的情况下,它写出该方法的原因是因为它基于默认路由。您可以通过在 Global.asax 中的默认路由之上添加另一条路由来解决此问题。你只需要像这样规定你想要的格式:

routes.MapRoute(
    "Recruiter",
    "Recruiter/{id}/{name}",
    new { controller = "Recruiter", action = "Details" }
);

MVC 将按照它们注册的顺序处理您的路由,因此将其放在默认值之前将使其使用您的路由。

编辑:

您可能会发现此路由调试工具很有用。

于 2009-10-12T13:39:35.083 回答