ASP MVC领域和ActionLink

时间:2009-05-19 14:49:05

标签: asp.net-mvc asp.net-mvc-areas

我正在开发一个新项目,我想使用Phil Haack Areas(1)idea + Steve Sanderson的调整(2)。我有一个简单的根视图,其中包含一个视图区域(Foo)的动作链接。生成的URL具有适当的区域,但它在末尾附加根控制器(Bar)。这是我的根视图代码:

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

<h2>Index</h2>

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

</asp:Content>

这是它生成的网址:

本地主机:6494 /富/酒吧

知道为什么“/ Bar”在那里?

(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/

3 个答案:

答案 0 :(得分:20)

我找到了解决方案。我不认为这是合适的,所以我会要求改进。通过指定控制器名称,我可以正确地获取URL。即。

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

<h2>Index</h2>

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

</asp:Content>

一旦我这样做了,那么网址是正确的

本地主机:6494 /富

为什么这是一个问题? Phil的演示使用名为HomeController的控制器。我不知道(因为我无法追踪)Html.ActionLink()方法如何构建URL;但它看起来好像是依赖HomeController的默认情况,我没有。

如果有人建议如何允许未命名为Home的控制器作为默认值,请回复。感谢

答案 1 :(得分:2)

没有Home作为默认控制器名称,只需change the default route

答案 2 :(得分:0)

@Joe

在App_Start / RouteConfig.cs文件中,您必须将默认控制器的值从Home更改为您喜欢的任何值:

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