Asp.net-Mvc
ASP.NET MVC Url.Action 將目前路由值添加到生成的 url
我在 SO 中已經多次看到這個問題,但沒有一個有任何可接受的答案:
ASP.NET MVC @Url.Action 包含目前路由數據
基本上我有一個控制器,它有一個名為 Group 的操作方法,它有一個重載,它不接收任何參數並顯示一個元素列表,另一個接收一個 id 並顯示該組的詳細資訊。
如果我做這樣的事情:
Url.Action("Group", "Groups");從站點的首頁 (/) 它返回一個如下所示的 url:
"mysite.com/Groups/Group"沒關係現在,如果站點的目前地址是 /Groups/Group/1 並且我呼叫相同的方法
Url.Action("Group", "Groups");返回的網址是這樣的:
"mysite.com/Groups/Group/1"它會在生成 URL 時自動添加目前頁面的路由值。即使我以這種方式生成 URL:
Url.Action("Group", "Groups", null);因此明確指定我不想要任何路由值,生成的 URL 是相同的。要獲得我想要的地址,我必須將路由值顯式設置為空字元串,如下所示:
Url.Action("Group", "Groups", new {id=""});這將生成以下網址:
"mysite.com/Groups/Group"我的問題是,為什麼會發生這種情況?如果我沒有設置任何路由值,則不應將它們添加到生成的 URL。
如果您沒有明確設置它們,Url.Action 將重用目前請求參數。它是在出站 url 匹配算法中設計的。在生成url的過程中查找路由數據參數時,參數取自:
明確提供的值
來自目前請求的值
預設值
按照我上面指定的順序。
路由的出站匹配算法很複雜,因此最好顯式設置請求的所有參數,就像您在範例中所做的那樣