2013-05-01 66 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