[英]ASP.NET MVC Beta - Grouping Controllers and Views possible?
我正在使用最新的 beta 版本构建 ASP.NET MVC 应用程序,我想知道是否可以更改默认项目布局
/Views/Home/Index.aspx /Views/Home/About.aspx
到
/Blog/Views/Home/Index.aspx /Blog/Views/Home/About.aspx
/Forum/Views/Home/Index.aspx /Forum/Views/Home/About.aspx
目标是在单个 Web 项目中对“应用程序”进行一些分离,就像 Thomas Owens 在这里已经问过的那样: 在 MVC 框架下,其他开发人员会期望哪种目录结构?
当然,这也应该包括控制器,而不仅仅是视图。
是的,应该可以做到这一点。 我能想到一种方法; 可能还有其他人。
第一步是修改默认路由以包含您的应用程序名称:
routes.MapRoute("Default",
"{applicationName}/{controller}/{action}/{id})",
null, null);
我假设您要将两个“应用程序”分组到单个程序集中的不同命名空间中。 所以你可能有两个命名空间,比如:
接下来,您需要更改控制器工厂,以便它实例化正确的控制器。 您可以通过对 DefaultControllerFactory 进行子类型化并覆盖 GetControllerType 方法来完成此操作:
protected override System.Type GetControllerType(string controllerName)
{
string applicationName;
if (RequestContext != null &&
RequestContext.RouteData.Values.TryGetValue(
"applicationName", out applicationName)) {
// return controller type using app name to
// look up namespace and controllerName argument
return ...
}
// if no match, maybe it's a different controller/route
return base.GetControllerType(controllerName);
}
最后,您需要告诉 MVC 使用您的 ControllerFactory。 在 Global.asax.cs 中:
private void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
ControllerBuilder.Current.SetControllerFactory(
MyApp.MyControllerFactory());
}
可以类似地处理定位视图。 在这种情况下,您将子类型化 WebFormViewEngine。
我刚刚写了一篇博客文章,描述了一种对控制器进行分组的方法,类似于单轨中的“区域”。 不过,它还没有解决嵌套区域。
http://haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx
这不是一个新概念。 它在Monorail 中称为“区域”。 最近在ATL.NET 论坛和其他地方有很多关于这个话题的讨论。 史蒂夫桑德森想出了一种方法来做到这一点,但显然它留下了一些问题。 作为回应,显然 MVC 团队将在未来的版本中对其进行“深入研究”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.