2010-03-15 93 views
0

我試圖返回我的鏈接,因此它們顯示爲/Area_1419.aspx/2/1。路線鏈接 - Url.Action

我已經設法在例子2中得到這個結果,但我不明白它爲什麼會起作用,因爲我會看到下面的例子1工作。

我不明白例2知道如何去Area_1419控制器

路線

routes.MapRoute(
    "Area_1419 Section", 
    "Area_1419.aspx/{section_ID}/{course_ID}", 
    new { controller = "Home", action = "Index" } 
); 

捷徑實施例1

<a href='<%=Url.Action("Area_1419", 
    new { section_ID="2", course_ID="1" })%>'><img .../></a> 

返回:/Home.aspx/Area_1419?section_ID=2 & COURSE_ID = 1個

鏈接例2

<a href='<%=Url.Action("index", 
    new { section_ID="2", course_ID="1" })%>'><img .../></a> 

返回:/Area_1419.aspx/2/1

回答

2

記住 - 網址是從您的控制器和他們的行動分離。

這意味着甚至bizzare網址,例如「trolololo/nomnomnom/1/2/3」可能會也可能不會呼叫Home/Index或任何其他控制器/操作組合。

在你的情況 - 例2實際上不知道如何去Area_1419控制器。

「Area_1419.aspx/{SECTION_ID}/{} COURSE_ID」

但仍鏈接會打電話回家控制器指數操作,因爲:

Url.Action從這些路線的詳細信息算出網址默認路由值:

新{控制器= 「家」,行動= 「索引」}


假設你有Area_1419控制器與指數的動作,你的路線應該是這樣的:

routes.MapRoute(
    "Area_1419 Section", 
    "Area_1419.aspx/{section_ID}/{course_ID}", 
    new { controller = "Area_1419", action = "Index" } //changes here 
); 

This is您所呼叫的內容。

UrlHelper.Action方法(String,對象)

通過使用指定的操作名稱和路由值生成一個完全合格的URL到一個操作方法。

此方法重載不會試圖找出適當的控制器。它假設你知道它(從當前路由值中取出),並將第一個字符串參數理解爲一個動作名稱。

嘗試使用this one

UrlHelper.Action方法(字符串,字符串,對象)
通過使用指定的操作的名稱,控制器名稱和路由值生成一個完全合格的URL到一個操作方法。

你的情況:

Url.Action("Index","Area_1419", new { section_ID="2", course_ID="1" }); 
+0

我更新了路線,但鏈接<%= Url.Action(「Area_1419」,new {section_ID =「2」,course_ID =「1」})%>仍然返回/Home.aspx/Area_1419?section_ID = 2&course_ID = 1 – Jemes 2010-03-15 12:27:20

+0

@Jemes檢查我的更新:) – 2010-03-15 12:48:14

+0

非常感謝! – Jemes 2010-03-15 12:59:14

1

您可以使用Url.RouteUrl(),你的情況

Url.RouteUrl("Area_1419 Section", new { controller = "Home", action = "Index", section_ID="2", course_ID="1"}

,以確保您使用正確的路徑名,並沒有得到正確的URL -有什麼關係。