【发布时间】:2014-04-19 21:32:17
【问题描述】:
我最近发现了 Areas in ASP.NET MVC 4,我已经成功实现了它,但是我在 Razor 视图中遇到了 @Html.ActionLink 助手的问题。这个助手生成的 URL 似乎总是相对于当前页面的 URL。
我在 IIS 7 (Win7) 中将我的网站配置为 /Foo 的应用程序虚拟目录。
我注册了两个区域:管理员和博客。我在AdminAreaRegistration.cs 和BlogsAreaRegistration.cs 文件中有默认代码。我在默认 RouteConfig 的默认值中添加了 namespaces = new[] { "MvcProject.Controllers" }:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {
controller = "Home", action = "Index", id = UrlParameter.Optional,
namespaces = new[] { "MvcProject.Controllers" }
}
);
}
}
当我转到我网站的主页:http://localhost/Foo 时,它会正确加载我网站的“主页”页面。此时,所有操作链接都有正确的 URL。
来自MvcProject/Views/Shared/_Layout.cshtml的示例代码
<h2>Main Navigation</h2>
<ul>
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("Blogs", "Index", "Blogs/Home")</li>
<li>@Html.ActionLink("Admin", "Index", "Admin/Home")</li>
</ul>
这正确地将 HTML 呈现为:
<h2>Main Navigation</h2>
<ul>
<li><a href="/Foo">Home</a></li>
<li><a href="/Foo/Blogs/Home"></li>
<li><a href="/Foo/Admin/Home"></li>
</ul>
例如,当我在浏览器中导航到“博客”时,此 URL 会正确加载到浏览器中:/Foo/Blogs/Home。
现在我的主导航中的链接将它们的 URL 更改为:
<h2>Main Navigation</h2>
<ul>
<li><a href="/Foo/Blogs/Home">Home</a></li>
<li><a href="/Foo/Blogs/Blogs/Home"></li>
<li><a href="/Foo/Blogs/Admin/Home"></li>
</ul>
请注意,“Blogs/”附加到 IIS 虚拟目录名称后,因此 /Foo/Blogs/Home 现在是 /Foo/Blogs/Blogs/Home。
控制器和视图呈现正常,只是在我的MvcProject/Views/Shared/_Layout.cshtml 视图中对@Html.ActionLink 的调用没有按预期工作。
感觉好像我错过了一些微不足道的东西,但没有多少搜索得到答案。我发现的用于在 ASP.NET MVC4 中实现区域的每一篇博文和教程都没有提及 @Html.ActionLink 行为方式的变化。
【问题讨论】:
标签: c# asp.net-mvc-4 razor asp.net-mvc-routing