1

這一個一直扔我,所以我想我會尋求一些幫助。我有這個與我的「類別」路線一起工作,但由於某種原因,當我試圖對「消費者」做同樣的事情時,它根本無法工作。這是必要的背景信息:ASP.NET MVC 3路由在/管理區域名稱而不是id

路由(AdminAreaRegistration.cs):

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     //matches /Admin/BusinessCategories/MyCategory/children 
     context.MapRoute(
      "ChildCategories", 
      "Admin/BusinessCategories/{category}/children", 
      new { controller = "BusinessCategories", action = "ViewChildren" } 
     ); 

     //matches /Admin/BusinessCategories/MyCategory/edit 
     context.MapRoute(
      "EditCategory", 
      "Admin/BusinessCategories/{category}/edit", 
      new { controller = "BusinessCategories", action = "Edit" } 
     ); 

     // want this to match /Admin/Consumers/JoeBob/details 
     context.MapRoute(
      "ConsumerDetails", 
      "Admin/Consumers/{alias}/details", 
      new { controller = "Consumers", action = "Details" } 
     ); 

     //matches /Admin 
     //matches /Admin/BusinessCategories 
     //matches /Admin/BusinessCategories/New 

     context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      new { controller = "AdminHome", action = "Index", id = UrlParameter.Optional }, 
      new { id = @"\d+" } 
     ); 
    } 

然後在我的消費者控制器(ConsumersController.cs):

public class ConsumersController : Controller 
{ 

    public ActionResult Index() 
    { 
     ...code... 
    } 

    [HttpGet] 
    public ActionResult Details(string alias) 
    { 
     return View(alias); 
    } 
} 

然後我生成我的鏈接像所以:

@Html.ActionLink(c.Alias, "Details", "Consumers", new { alias = c.Alias }, null) 

問題是我對@ Html.ActionLink的調用正在生成鏈接,如:

/Admin/Consumers/details?alias=JoeBob(這會導致404,如果點擊) 而不是我想要的東西,那就是:

/Admin/Consumers/JoeBob/details 

有一件事我注意到是,如果我改變alias = c.Aliasid = c.Alias,它會生成如下URL: /Admin/Consumers/details/JoeBob(因此它將查詢字符串中的別名部分刪除,但仍將「詳細信息」放在別名之前)。

任何想法?

編輯:重新啓動IIS解決了我的問題。不知道爲什麼,但確實如此。

+0

我不知道是什麼具體導致了這個問題,但我強烈建議看看routedebugger看看它是否提供任何提示http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx – lomaxx

+0

是的,我知道這個util - 和鏈接,實際上,應該是對V2 - http://haacked.com/archive/2011/04/13/routedebugger-2.aspx – jamauss

回答

1

您的路線配置正確(我測試了它們)。我懷疑你是因爲含有你的@ Html.ActionLink()標記的視圖在你的管理區之外而得到這種不當行爲。如果它在您的管理區域內,您應該看到生成的正確鏈接。但是,在您的管理區域之外,您需要聲明您的目標是這樣的:

@Html.ActionLink(c.Alias, "Details", "Consumers", new { alias = c.Alias, area = "Admin" }, null) 
+0

實際上,@ Html.ActionLink調用**在我的管理區域內。奇怪的是,我接到了服務器並重新啓動了IIS,現在正在生成正確的URL結構,但現在MVC正在嘗試使用消費者的名稱而不是「詳細信息」視圖查看View,儘管我在我的路線中指定了Controller和Action名稱。 : - \ – jamauss

+0

沒關係 - 想出了那部分。我將別名傳遞給View函數(留下了一些測試代碼),所以它就像返回View(別名)一樣。我刪除了「別名」部分,所以它只是返回View(),一切都很好。 – jamauss

+0

這很奇怪。我在一個全新的MVC3項目中測試了你的代碼,它適用於我,所以我不認爲你的代碼有什麼問題。祝你好運,解決這個問題。 –