我在非Area Controller文件夹中有一些控制器,而在Areas / Controllers文件夹中有一些控制器。
例如:我在Controllers文件夹(非区域)中有EquipmentController,ContractsController
我在Areas / Controllers文件夹中有一个名为SiteManagement的控制器。
我可以导航至设备(http://localhost:3384/Equipment),合同(http://localhost:3384/Contracts)和站点管理(http://localhost:3384/SiteManagement/UsersAdmin)视图页面,而不会出现任何问题。但是,当我单击SiteManagement链接时,我无法导航回到“设备或合同”页面,因为它们的链接附加了SiteManagement / Contracts或SiteManagement / Equipment,并且出现页面未找到错误。
我知道路由存在问题。如何解决此问题?
“布局”页面(位于“视图” /“共享”文件夹中)的示例代码
<li class="has-sub">
<a href="collapsed-sidebar.html"><i class="icon-doc-text"></i><span class="title">Contracts</span></a>
<ul class="nav collapse">
<li><a href="@Url.Action("Create", "Contract")"><span class="title">Create New Contract</span></a></li>
<li><a href="@Url.Action("Index", "Contract")"><span class="title">View Contracts</span></a></li>
</ul>
</li>
<li class="has-sub">
<a href="collapsed-sidebar.html"><i class="icon-doc-text"></i><span class="title">Equipment</span></a>
<ul class="nav collapse">
<li><a href="@Url.Action("Create", "Equipment")"><span class="title">Create New Equipment</span></a></li>
<li><a href="@Url.Action("Index", "Equipment")"><span class="title">View Equipment</span></a></li>
</ul>
</li>
<li class="has-sub">
<a href="@Url.Action("Index", "Admin")" title="Adminstrator" aria-expanded="true">
<i class="icon-layout"></i><span class="title">Adminstrator</span>
</a>
<ul class="nav collapse">
<li><a href="@Url.Action("Index", "UsersAdmin", new {Area="SiteManagement" })"><span class="title">Users</span></a></li>
<li><a href="@Url.Action("Index", "RolesAdmin", new {Area="SiteManagement" })"><span class="title">Roles</span></a></li>
</ul>
</li>
路由配置代码
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 }
);
}
站点管理区域注册
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"SiteManagement_default",
"SiteManagement/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
}
预期结果: 我希望能够轻松地在区域站点和非区域站点之间导航。
答案 0 :(得分:1)
不在区域内的控制器
*set the Area Empty*
@Url.Action("actionName", "controllerName", new {Area=""} )
因此,在您的情况下,我们可以:
<a href="@Url.Action("Create", "Contract", new {Area=""})"><span class="title">Create New Contract</span></a>
下面是我的路由配置的样子。可能也有帮助
public class RouteConfig {
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.ashx/{*pathInfo}");
routes.MapMvcAttributeRoutes();
AreaRegistration.RegisterAllAreas();
routes.MapRoute(
name: "Default", // Route name
url: "{controller}/{action}/{id}", // URL with parameters
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
}
谢谢