Mvc:从网址中排除ID

时间:2013-05-01 01:47:21

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

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

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

提前致谢

2 个答案:

答案 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的答案一样创建自定义路线。只需确保它高于默认路线。