我正在开发一个新项目,我想使用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/
答案 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
);