需要帮助mvc&路线

时间:2009-10-12 13:22:54

标签: model-view-controller actionlink

我是MVC的新手,我正在尝试使用它设置新网站。出于搜索引擎优化的原因,我们需要将页面的网址设置为“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的形式给我一个网址。我告诉同事我应该使用Html.ActionLink在视图和控制器中创建链接,以便如果路线将来发生变化,它将自动运行。不幸的是,在这种情况下,他不确定如何做到这一点。所以,我的问题是......

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

2 个答案:

答案 0 :(得分:1)

最好使用ActionLink方法写出链接,就像你的同事说的那样,这样他们总能匹配你的路线。

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

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

MVC将按照他们注册的顺序浏览您的路线,因此在默认设置之前将其设置为使用您的路线。

修改

您可能会发现此route debugging tool有用。

答案 1 :(得分:1)

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

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