2

我的 cshtml 页面中有下一个 foreach,它允许我在每个模型项中进行迭代

@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 循环中的每个元素都有一个类似的 url

http://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 参数发送到我的控制器?

提前致谢

4

2 回答 2

1

添加另一条路线:

routes.MapRoute(
    name: "NewsTitleRoute",
    url: "News/Details/{id}/{title}",
    defaults: new { 
        controller = "News", 
        action = "Details", 
        id = UrlParameter.Optional, 
        title = UrlParameter.Optional 
        }
);

在您的控制器中声明 details 方法,如下所示,其中两个参数是可选的:

public ActionResult Details(int? id, string title="")
{
}

该路由配置和Details方法适用于:

于 2013-05-01T01:51:12.763 回答
0

您可以只传递参数的title属性id

@Url.RouteUrl("Details",
              new { action = "Details", controller = "News", id = item.title})

然后id在您的操作方法中将参数类型设置为字符串:

public ActionResult Details(string id)

或者您可以创建自定义路线,如 von-v 的答案。只要确保它在默认路由之上。

于 2013-05-01T01:51:04.790 回答