13

我正在做一个新项目,我想使用 Phil Haack Areas (1) 想法 + 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>

这是它生成的 URL:

本地主机:6494/Foo/Bar

知道为什么“/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/

4

3 回答 3

20

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

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

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

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

于 2009-05-19T15:43:54.073 回答
2

要不Home使用默认控制器名称,只需更改默认路由即可。

于 2009-05-19T15:52:23.027 回答
0

@乔

在您的 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
        );
于 2013-06-27T17:30:05.620 回答