我想我已经问过了,但解决方案并没有真正有意义。无论如何,我对我的观点有这样的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?
非常感谢任何建议!
答案 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})