2010-06-20 29 views

回答

0

StackOverflow上的name部分完全被忽略。這是重要的ID。這工作:access to article by article name in ASP.NET MVC2和這個問題的鏈接。要生成包含您可以定義以下航線的URL name鏈接:

routes.MapRoute( 
    "NameIdRoute", 
    "{controller}/{action}/{id}/{name}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional, name = UrlParameter.Optional }, 
    new { id = @"\d+" } 
); 

然後:

<%: Html.ActionLink("some text", "action", new { id = Model.Id, name = Model.Name }) %> 
+0

我必須自己將「文章的名稱」轉換爲「文章的名稱」嗎? – ck3g 2010-06-20 15:17:05

+0

你可以看看這個答案是如何在StackOverflow上完成的:http://stackoverflow.com/questions/25259/how-do-you-include-a-webpage-title-as-part-of- a-webpage-url/25486#25486 – 2010-06-20 15:37:02

0

創建允許指定的名稱作爲URL的一部分的路線。請注意,它可能沒有實際用於解決文章,因爲它可能不是唯一的。 id是實際用於查找和顯示正確文章的信息位,但名稱是上下文url的一部分。

routes.MapRoute(
    "Question", 
    "{controller}/{id}/{name}", 
    new { controller = "questions", action = "show", id = UrlParameter.Optional, name = UrlParameter.Optional }, 
    new { id = "[0-9]+" } // constraint to force id to be numeric 
); 

現在,當您使用Html.ActionLink(),並指定名稱作爲參數,該路線將匹配和投入名稱作爲URL的一個組成部分,而不是查詢參數。

<%= Html.ActionLink("questions", new { id = Model.ID, name = Model.NameForUrl }) %> 

請注意,如果您有多條可能匹配的路由,則可能需要使用RouteLink並按名稱指定路由。另外,訂單很重要。

+0

對於這種方法,我必須在自己的單詞之間插入「 - 」?或者有完整的工具嗎? – ck3g 2010-06-20 14:17:42