从MVC 2开始,我们可以轻松创建区域。现在我的问题与嵌套区域(区域内的区域)有关。
选择我的“father
”区域文件夹,右键单击> Add
> new Area
没有选项。
是否有可能以其他方式进行?或者这个选项会在不久的将来推出吗?
答案 0 :(得分:5)
我意识到这是一个古老的问题,但我会回答它,以防其他人试图解决这个问题。解决这个问题的方法是创建在比区域更低的级别使用不同路由值的区域,例如,您的RouteConfig看起来像这样:
public class RouteConfig
{
/// <summary>
/// A function that registers the default navigation route.
/// </summary>
/// <param name="routes">The RouteCollection to act on.</param>
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
var route = routes.MapRoute(
name: "Default",
url: "{area}/{subArea}/{controller}/{action}/{id}",
defaults: new { area = "DefaultArea", controller = "Home", action = "Splash", id = UrlParameter.Optional, section = "Customer" },
namespaces: new string[] { "Application.Controllers" });
}
}
您的一个子区域注册可能如下所示:
public class ApplicationSubAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "ApplicationSubArea";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"SubArea_default",
"Area/SubArea/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new string[] { "Application.Areas.AreaName.SubAreaName.Controllers" }
);
}
}
读完之后,&#34;区域&#34;还是看起来像一个字?因为它不适合我。
P.S。您可以根据需要递归多次(理论上),例如你可以做
url: "{area}/{subArea}/{subSubArea}/{subSubSubArea}/{evenMoreSubArea}/{controller}/{action}/{id}",
在RouteConfig.cs和中
"Area/SubArea/SubSubArea/SubSubSubArea/EvenMoreSubArea/{controller}/{action}/{id}",
在您的地区注册。
答案 1 :(得分:3)
目前还没有任何信息可以告知是否存在嵌套区域。
将来也许这会改变。
答案 2 :(得分:2)
使用Multi-project areas的概念作为开始,我猜你可以递归地创建更多的嵌套区域。
答案 3 :(得分:0)
你不想拥有嵌套的aereas。 您的软件设计有问题。
最常见的情况是,您使用区域作为Html渲染器, 因此是显示模板。
答案 4 :(得分:0)
也许这样的事情可能有所帮助。它更像是一个mvc-contrib的研究。 我在版本1中看到它不知道它是否与MVC2兼容 这是子控制器的概念:http://mhinze.com/subcontrollers-in-aspnet-mvc/
答案 5 :(得分:0)
此时 MVC仅支持主应用程序,然后支持下一级别的区域和非嵌套区域,但您可以查看为项目添加以下功能的This Nuget Package: