2014-02-14 47 views
2

特定的路線我在我的路線配置聲明如下兩種途徑:使用與Url.Action

routes.MapRoute(
    name: "SpecificAction", 
    url: "{controller}/{action}/{id}-{id2}", 
    defaults: new { controller = "Main", action = "SpecificAction", id = UrlParameter.Optional, id2 = UrlParameter.Optional } 
); 

routes.MapRoute(
    name: "DefaultNoParams", 
    url: "{controller}/{action}/", 
    defaults: new { controller = "Main", Action = "Index" }, 
    namespaces: new string[1] { "Project.Controllers" } 
); 

我有一個看起來像這兩控制器操作:

[HttpGet] 
public ActionResult TheAction() 
{ 

} 

[HttpPost] 
public ActionResult TheAction([ModelBinder(typeof(SpecificModelBinder))] SpecificModel model) 
{ 

} 

我想鏈接到第一,我認爲這些行動,所以我生成一個使用Url.Action

<a href="@Url.Action("TheAction", "Main")">The Action</a> 

然而,這輸出url http://site/Main/TheAction/-(注意最後一個破折號,這似乎表明我的SpecificAction路由正在使用。

有一些方法我可以調用Url.Action與特定的路線?或者有沒有其他的方法可以避免這種短跑出現在網址中?

+1

路由表不會影響Url.Action呈現URL的方式......所以你的鏈接呈現爲''? –

+0

Odd... What is rendered when you add this to your View: 'The Action' –

回答

2

嘗試改變你的路由的順序。把SpecificAction路線如下面的DefaultNoParams路線後:

routes.MapRoute(
    name: "DefaultNoParams", 
    url: "{controller}/{action}/", 
    defaults: new { controller = "Main", Action = "Index" }, 
    namespaces: new string[1] { "Project.Controllers" } 
); 

routes.MapRoute(
    name: "SpecificAction", 
    url: "{controller}/{action}/{id}-{id2}", 
    defaults: new { controller = "Main", action = "SpecificAction", id = UrlParameter.Optional, id2 = UrlParameter.Optional } 
); 

更新:要回答以下要求的問題:

你能否提供一些細節就如何路由表的映射將 影響如何網址。 Action會生成一個URL,以便附加一個短劃線 ?

首先,在視圖中使用以下代碼OP:

<a href="@Url.Action("TheAction", "Main")">The Action</a> 

它生成:

<a href="/Main/TheAction">The Action</a> 

之所以有爲破折號是因爲兩者的ID參數是可選的,所以不這兩個ID,只會有一個破折號,它會滿足路線條件。

routes.MapRoute(
      name: "SpecificAction", 
      url: "{controller}/{action}/{id}-{id2}", 
      defaults: new { controller = "Main", action = "SpecificAction", 
      id = UrlParameter.Optional, id2 = UrlParameter.Optional } 
    ); 

如果其中一個ID不是可選的,它將繼續檢查下一個路由。但OP需要id參數是可選的,這就是爲什麼我的解決方案是更改路由訂單。

+0

工作,謝謝! – Mansfield

+0

@Lin您能否提供一些有關路由表映射如何影響Url.Action如何生成URL以便追加短劃線的細節? –

+0

@ChrisHardie,我更新了答案以獲得更多細節,請看一看。 – Lin

7

重複的問題被發現here

總之,使用Url.RouteUrl()這一翻譯的Url.Action()以獲得正確的URL。

就你而言,如果你願意的話,你甚至可以用@Html.RouteLink()來獲得整個定位標記。