我是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在视图和控制器中创建链接,以便如果路线将来发生变化,它将自动运行。不幸的是,在这种情况下,他不确定如何做到这一点。所以,我的问题是......
答案 0 :(得分:1)
最好使用ActionLink方法写出链接,就像你的同事说的那样,这样他们总能匹配你的路线。
在您当前的情况下,它写出方法的原因是因为它基于默认路由。您可以通过在Global.asax中添加默认值之上的其他路由来解决此问题。你只需要像这样规定你想要的格式:
routes.MapRoute(
"Recruiter",
"Recruiter/{id}/{name}",
new { controller = "Recruiter", action = "Details" }
);
MVC将按照他们注册的顺序浏览您的路线,因此在默认设置之前将其设置为使用您的路线。
修改强>
您可能会发现此route debugging tool有用。
答案 1 :(得分:1)