2009-05-19 57 views
13

我正在開發一個新項目,我想使用Phil Haack區域(1)idea + Steve Sanderson的調整(2)。我有一個簡單的根視圖和一個視圖區域(Foo)的動作鏈接。生成的URL具有適當的區域,但它在末尾附加了根控制器(Bar)。這裏是我的根視圖代碼:ASP MVC Areas和ActionLink

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<h2>Index</h2> 

<%= Html.ActionLink("Foo Index Page", "Index", new { area="Foo" })%> 

</asp:Content> 

,這裏是它生成的網址:

本地主機:6494 /美孚/酒吧

任何想法,爲什麼「/酒吧」是在那裏?

(1):haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx

(2):blog.codeville.net/2008/11/05/app-areas-in-aspnet-mvc-take-2/

回答

20

我找到一個解決方案。我認爲這不合適,所以我會要求改進。通過指定控制器名稱,我可以正確地獲取URL。 I.E.

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<h2>Index</h2> 

<%= Html.ActionLink("Foo Index Page", "Index", new { area="Foo", controller="Baz" })%> 

</asp:Content> 

一旦我這樣做,那麼URL是正確的

本地主機:6494 /美孚

爲什麼這是一個問題嗎? Phil的演示使用名爲HomeController的控制器。我不知道(因爲我無法追蹤)Html.ActionLink()方法如何構建URL;但它看起來好像它依賴於現有的HomeController的默認情況,這是我沒有的。

如果任何人有關於如何允許未命名爲Home的控制器作爲默認設置的建議,請回復。謝謝

0

@Joe

在你App_Start/RouteConfig.cs文件,你必須從家到任何你喜歡的更改默認的控制器值:

routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "NAME_OF_YOUR_HOME_CONTROLLER", action = "Index", id = "" } // Parameter defaults 
     );