我在cshtml页面中有下一个foreach,它允许我迭代每个Model项
@foreach (var item in Model)
{
<div class="date">
@item.pubDate
</div>
<a href="@Url.RouteUrl("Details", new { action = "Details", controller = "News", id = item.id, title = item.title })">
<img src="some route" alt="some alt" />
</a>
}
所以现在它工作正常,foreach循环中的每个元素都有一个类似
的urlhttp://something.com/News/Details/1/first-title
http://something.com/News/Details/2/second-title
可以创建类似
的网址http://something.com/News/Details/first-title
http://something.com/News/Details/second-title
但我仍然可以将id参数发送到我的控制器?
提前致谢
答案 0 :(得分:1)
添加另一条路线:
routes.MapRoute(
name: "NewsTitleRoute",
url: "News/Details/{id}/{title}",
defaults: new {
controller = "News",
action = "Details",
id = UrlParameter.Optional,
title = UrlParameter.Optional
}
);
在你的控制器中声明这样的细节方法,两个参数是可选的:
public ActionResult Details(int? id, string title="")
{
}
该路由配置和Details
方法适用于:
答案 1 :(得分:0)
您只需传递title
参数的id
属性。
@Url.RouteUrl("Details",
new { action = "Details", controller = "News", id = item.title})
然后在操作方法中将id
参数的类型设置为字符串:
public ActionResult Details(string id)
或者您可以像von-v的答案一样创建自定义路线。只需确保它高于默认路线。