2009-05-19 59 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 
     );