2013-10-01 127 views
52

我有一個ASP.Net MVC 4應用程序,現在用的是Url.Action助手這樣的:@Url.Action("Information", "Admin")URL.Action(),包括路由值

本頁面同時用於添加新的和編輯管理員配置文件。網址如下:

Adding a new:  http://localhost:4935/Admin/Information 
Editing Existing: http://localhost:4935/Admin/Information/5 <==Admin ID 

當我在網站的Editing Existing部分,並決定,我想補充一個新的管理我點擊以下鏈接:

<a href="@Url.Action("Information", "Admin")">Add an Admin</a> 

的但問題是上述鏈接實際上是http://localhost:4935/Admin/Information/5。只有當我在該頁面中編輯現有的管理員時纔會發生這種情況。在網站上的任何地方它鏈接正確http://localhost:4935/Admin/Information

有沒有其他人看到過?

UPDATE:

RouteConfig:

 routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     );  
+0

你檢查你是否你的路由註冊是正確的? – Spock

+2

你是什麼意思?它幾乎是標準的默認模板 – hjavaher

回答

75

在MVC中傳出URL生成基於當前路由架構。

因爲您的Information action方法需要id參數,並且您的路由集合具有您當前請求的url(/ Admin/Information/5)的id,id參數會從現有路由集合值中自動獲取。

來解決這個問題,你應該使用UrlParameter.Optional:

<a href="@Url.Action("Information", "Admin", new { id = UrlParameter.Optional })">Add an Admin</a> 
+1

我們如何在asp.net核心中做到這一點?沒有'UrlParameter.Optional' – MOD

0

您也可以以這種形式使用:

<a href="@Url.Action("Information", "Admin", null)"> Admin</a>