2013-05-01 63 views
2

我有我的CSHTML页接下来的foreach排除ID,它允许我遍历每个示范项目MVC框架:从URL

@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循环中的每个元素都有一个网址像

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参数?

在此先感谢

回答

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方法用于工作:

+0

和whati我应该在我的控制器中做id参数?,我需要标题和id,但只在我的url中显示标题...它不适用于我。 – Steve 2013-05-01 01:58:26

+0

请看我更新的答案。我改变了路线的配置方式。如果你需要id和参数,那么你需要传递它。否则,如果你的网站没有收到它,怎么知道'id'使用? – 2013-05-01 02:00:44

+0

好吧你是对的我认为这是可能的发送身份证与一些“后面”的方式只显示在URL中的标题,这不是绝对可能我想要做什么? :( – Steve 2013-05-01 02:10:04

0

您只需通过title属性id参数。

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

然后设置id参数为字符串类型动作方法:

public ActionResult Details(string id) 

或者你可以像冯-V的答案创建自定义路线。只要确保它在默认路线上方。

+0

,但我需要两个参数的id和标题,但只显示标题在我的网址... – Steve 2013-05-01 01:59:32

+0

感谢您的帮助! – Steve 2013-05-01 02:20:30