C# 使用区域时,在非区域中设置控制器是否有意义?

C# 使用区域时,在非区域中设置控制器是否有意义?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,如果我决定在一个新的应用程序中使用mvc3中的区域,在非区域中使用控制器有意义吗 还是这会让事情变得变化无常 这是一个新的项目,我还没有在一些领域工作过,所以不确定事情会如何结束,所以现在我正在寻求建议 到目前为止,我有一个/admin区域设置 我可以将代码组织到多个区域中,并且仍然可以将带有区域名称前缀的url设置为正确的?如果您愿意,您可以在主应用程序中设置控制器,并将其他区域分隔开。这取决于你,没有理由你不能或不应该 “我可以将代码组织到区域中,但仍然可以将带有区域名称前缀的url设置为正

如果我决定在一个新的应用程序中使用mvc3中的区域,在非区域中使用控制器有意义吗

还是这会让事情变得变化无常

这是一个新的项目,我还没有在一些领域工作过,所以不确定事情会如何结束,所以现在我正在寻求建议

到目前为止,我有一个/admin区域设置


我可以将代码组织到多个区域中,并且仍然可以将带有区域名称前缀的url设置为正确的?

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

“我可以将代码组织到区域中,但仍然可以将带有区域名称前缀的url设置为正确吗?”


绝对

我过去也做过类似的事情。在我的解决方案中,我有几个区域可能包含也可能不包含所需的控制器。注册区域时,可以使用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即可。这种方法在我们的解决方案中非常有效,因为它是一种非常通用的实现,具有大量的代码重用

我认为在非区域设置控制器通常是有意义的

例如,如果您实现了基于区域的控制器将从中继承的基本抽象控制器,我会将类似的内容放入根(非区域)控制器文件夹中


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

使用对你和你的团队有意义的东西。或者。。试着从社区寻求关于什么是最佳实践的建议。。疯狂的想法。。