2011-09-28 31 views
0

如果我决定在mvc3中使用区域,在新的应用程序中,将控制器放在非区域中有意义吗?使用区域时,控制器是否在非区域有意义吗?

还是会让事情变得不那么容易?

这是一个新项目,我还没有'与地区合作,所以不知道事情将如何结束,所以现在寻找建议。

到目前为止,我有一个/管理区域设置。

我可以将代码组织成区域,并仍然具有前缀正确的区域名称的网址?

+0

使用对你和你的团队有意义的东西。 – jfar

+2

或者..试着从社区中寻求什么被认为是最佳实践的建议..疯狂的想法.. –

回答

0

如果您愿意,可以在主应用程序中放置控制器,并将其他区域分隔开。它取决于你,没有理由你不能或不应该。

“我可以将代码组织到区域中,并且仍然有区域名前缀正确的url?”

绝对

0

我在过去做过类似的事情。在我的解决方案中,我有几个可能包含或不包含控制器的区域。注册区域时,可以使用UseNamespaceFallback选项。这允许控制器工厂在该区域中找不到控制器的情况下查看其他名称空间。

context.MapRoute(
"Admin_default", 
"Admin/{controller}/{action}/{id}", 
new {action = "Index", id = UrlParameter.Optional}, 
new[] {"Proj.Web.Controllers.Areas.Admin"} 
).DataTokens["UseNamespaceFallback"] = true; 

然后在Global.asax文件中添加默认控制器的名称空间。

ControllerBuilder.Current.DefaultNamespaces.Clear(); 
ControllerBuilder.Current.DefaultNamespaces.Add("Proj.Web.Controllers"); 
ControllerBuilder.Current.DefaultNamespaces.Add("Proj.Web.Controllers.Areas.Base"); 

如果您想要一个区域只使用其中的控制器,只需执行DataTokens [“UseNamespaceFallback”] = false。这种方法在我们的解决方案中效果很好,因为它是一个非常通用的实现,具有大量的代码重用。

0

我认为在非区域控制器通常是有意义的。例如,如果您曾经实现过基于区域的控制器将继承的基本抽象控制器,那么我会在根(非区域)控制器文件夹中放入类似这样的东西。

根据您的应用程序,您可能还会发现您拥有跨越多个区域的控制器。例如,您可能有一个带有用于导航的子操作的控制器。如果该区域只包含1个控制器,则将其放入专用的导航区域可能会过度杀伤。