2013-05-13 223 views
1

在ASP.NET MVC 4中,我想知道如何爲我生成鏈接。Asp.Net MVC 4路由和鏈接生成

設想一個簡單的控制器3點的操作,每次取一個整數參數 「的requestId」,例如:

public class HomeController : Controller 
{ 
    public ActionResult Index(int requestId) 
    { 
     return View(); 
    } 

    public ActionResult About(int requestId) 
    { 
     return View(); 
    } 

    public ActionResult Contact(int requestId) 
    { 
     return View(); 
    } 
} 

和該登記路徑(缺省路由之前):

routes.MapRoute(
    name: "Testroute", 
    url: "home/{action}/{requestId}", 
    defaults: new { controller = "Home", action = "Index" } 
); 

我撥打我的索引視圖使用http://localhost:123/home/index/8

在此視圖上,我呈現其他兩個操作的鏈接:

@Html.ActionLink("LinkText1", "About") 
@Html.ActionLink("LinkText2", "Contact") 

現在我希望MVC呈現此鏈接包括「的requestId」當前路由值,就像這樣:

http://localhost:123/home/about/8 
http://localhost:123/home/contact/8 

,但我得到這些鏈接(不放慢參數):

http://localhost:123/home/about 
http://localhost:123/home/contact 

...但不使用索引動作,如果我將指定一個:

@Html.ActionLink("LinkText3", "Index") 

我想避免的是用這種方式顯式地指定參數:

@Html.ActionLink("LinkText1", "Contact", new { requestId = ViewContext.RouteData.Values["requestId"] }) 

當我移動動作之前的RequestID參數放慢參數它就像我希望,但我不想動它:

routes.MapRoute(
    name: "Testroute", 
    url: "home/{requestId}/{action}", 
    defaults: new { controller = "Home", action = "Index" } 
); 

有人能解釋我這種行爲嗎?我怎樣才能得到這個工作,沒有明確指定參數?

+0

我有同樣的問題的requestId爲可選。 :\ – 2013-06-27 18:09:45

回答

0

InController: 更換INT可空INT

對於路由: 集路由

routes.MapRoute(
    name: "Testroute", 
    url: "home/{action}/{requestId}", 
    defaults: new { controller = "Home", action = "Index" ,requestId=RouteParameter.Optional } 
); 
+0

不幸的是,當我調用http:// localhost:123/home/index/8時,行爲仍然相同。我除了在所有鏈接中包含請求參數「8」外。 – martinoss 2013-12-19 13:17:24