mvc route actionlink url使用名称而不是id

时间:2011-10-21 15:32:09

标签: asp.net-mvc asp.net-mvc-3 routes global-asax

我想我已经问过了,但解决方案并没有真正有意义。无论如何,我对我的观点有这样的ActionLinks:

foreach( var item in Model){
<%: Html.ActionLink(item.Name, "Details", new {id = item.Id}) %>
}

现在,当它转到我的行动细节时,显然这将是网址

/MyThings/Details/{id}

我想知道是否可以显示该项目的名称而不是id使用slug?或像这样修改全局asax:

/MyThings/Details/CarKeys

事情是名称需要是唯一的,有没有办法我可以修改全局asax来显示名称而不是id?

非常感谢任何建议!

2 个答案:

答案 0 :(得分:8)

如果这仅用于搜索引擎优化目的,请同时包含ID和名称。该名称将是URL的一部分,但您的应用程序不会使用该名称。只需添加另一个使用该模板的路线:{controller}/{action}/{id}/{name}

您还需要转换您的名称,以确保它只包含有效的网址字符。网上有很多关于此的文章,而且非常简单。这是一个例子:http://chrismckee.co.uk/creating-url-slugs-permalinks-in-csharp/

答案 1 :(得分:6)

当然,您只需更改路由规则即可。查看您的Global.asax.cs文件或区域注册文件中的内容:

routes.MapRoute(..., "{controller}/{action}/{id}", ...);

...并将其更改为以下内容:

routes.MapRoute(..., "{controller}/{action}/{name}", ...);

然后让您的操作采用名称而不是ID:

Html.ActionLink(item.Name, "Details", new {item.Name})