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

时间:2011-09-28 01:48:33

标签: c# asp.net asp.net-mvc

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

或者这会让事情变得不稳定吗?

这是一个新项目,我没有'与区域合作,所以不确定事情将如何结束,所以现在寻求建议。

到目前为止,我已经设置了/ admin区域。

我可以将代码组织到区域中,并且仍然使用区域名称前缀正确的网址吗?

3 个答案:

答案 0 :(得分:0)

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

“我可以将代码组织到区域中,并且仍然使用区域名称前缀正确的网址吗?”

绝对

答案 1 :(得分: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。这种方法在我们的解决方案中运行良好,因为它是一种非常通用的实现,具有大量的代码重用。

答案 2 :(得分:0)

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

例如,如果您实现了基于区域的控制器将继承的基本抽象控制器,我会在根(非区域)控制器文件夹中放置这样的内容。

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