2017-03-17 100 views
1

這樣的問題已經在SO(post 1,post 2,post 3)之前被詢問過,但他們都沒有能夠幫助我。ASP.NET MVC 5屬性路由:當使用多個參數時,Url.Action返回空值

我有以下途徑(一LandingController類中定義):

[HttpGet] 
[Route("connections/{city:name}/map{page?}", Order = 2)] 
public Task<ActionResult> Connections(string city, int page = 1) 

爲此我試圖生成我的剃刀模板像這樣的URL:

@Url.Action("Connections", "Landing", new { city = "madrid", page = 1 }) 

@Url.Action("Connections", new { city = "madrid", page = 1 }) 

這兩個調用返回null。任何人有一個想法爲什麼?

但是,如果我省略了路由模板(做[Route("connections/{city:name}/map", Order = 2)])中的頁面參數,則會生成以下URL:/connections/madrid/map/?page=1,這不是我想要的,但它表明我在上述呼叫中做錯了事。

+0

可以還表示行進路線是如何定義的在你的路由配置? –

+0

我的路由是使用屬性路由定義的,即在action方法之上(我在問題中發佈的),所以它不在路由配置中。 –

+0

您可以嘗試'[路線(「連接/ {城市:名稱} /地圖/ {頁面?}]'? – juunas

回答

0
[HttpGet] 
[Route("connections/{city:name}/map{page?}", Order = 2)] 
public Task<ActionResult> Connections(string city, int page = 1) 

很確定你的路由不正確,{city:name}叫什麼名字?我不記得任何有約束類型的名稱。

你的屬性路由應該是如此簡單:

[Route("connections/{city}/map/{page?}", Order = 2)] 

如果要約束添加到頁面整數這將是:

[Route("connections/{city}/map/{page:int?}", Order = 2)] 
+0

謝謝你的回答,但即使我刪除'name'約束,我仍然得到'null',我已經嘗試過了... –

+0

應該工作,但是我很好奇你的控制器中是否有類似的路由那可能會導致衝突? – 12seconds

+0

不,我查過了。如果我調用我期望生成的URL('connections/{city:name}/map1')並運行調試器,那麼操作實現中設置的斷點就會被觸發 - 所以絕對不會產生衝突。 –