-1

我正在使用ASP.NET MVC3。我試圖配置我的路線,但似乎有衝突的路線。不知道如何解決這個問題,希望有人能指引我走向正確的方向。需要與正常路由配置相似的區域路由配置

我在我的網站有2個部分,可以查看應用程序。網站的普通用戶只能查看他/她的應用程序。管理員可以查看使用管理區域捕獲的所有應用程序。

可以將註釋添加到已存在的應用程序中。註釋只是在應用程序的過程中隨時可以捕獲的附加信息。我期待,以顯示已拍攝了這樣的應用程序中的所有筆記:

/Application/1001/Notes 
/Administration/Application/1001/Notes 

這是我如何配置我的路線:

Routes.MapRoute(
    "ApplicationNote", 
    "{controller}/{applicationId}/Notes", 
    new { controller = "Application", action = "Notes" }, 
    new { applicationId = @"\d+" }, 
    new[] { "MyProject.Web.Controllers" }); 

Routes.MapRoute(
    "AdminApplicationNote", 
    "{area}/{controller}/{applicationId}/Notes", 
    new { area = "Administration", controller = "Application", action = "Notes" }, 
    new { applicationId = @"\d+" }, 
    new[] { "MyProject.Web.Areas.Administration.Controllers" }); 

要顯示的第一個鏈接(旁邊的每個應用程序數據表)我在我的控制器下面將生成的動作鏈接,每個記錄:

string actionLinks = string.Empty; 
actionLinks += "<a href=\"" + Url.Action("Notes", "Application", new { area = string.Empty, applicationId = application.Id }) + "\">" + "Notes</a>"; 

第二連桿從我的控制器操作我顯示像這樣(,同如上):

string actionLinks = string.Empty; 
actionLinks = "<a href=\"" + Url.Action("Notes", new { applicationId = application.Id, area = "Administration", controller = "Application" }) + "\">" + "Notes</a>"; 

第一個配置效果良好:

/Application/1001/Notes 

...但第二次沒有這麼好。當我將鼠標懸停在第二個配置的鏈接,然後在狀態顯示:

/Administration/Application/Notes?applicationId=1001 

我在做什麼毛病管理區的路由配置?

+0

奇怪。我想知道applicationID約束是否被尊重,即使它不在指定的段中。您可以嘗試http://example.org/Administration/Application/Notes並查看哪些操作正在運行? –

+0

@Brendan Vogt你是否已經解決了管理區域的路由配置?你有沒有找到更好的解決方案? – Mate

回答

0

添加約束面積=的String.Empty

routes.MapRoute(
     "ApplicationNote", 
     "{controller}/{applicationId}/Notes", 
     new { controller = "Application", action = "Notes" }, 
     new { applicationId = @"\d+", area = string.Empty }, //<---- 
     new[] { "MyProject.Web.Controllers" } 
    );