ASP.NET MVC中的命名空间相当于什么?

3
在Rails中,我可以创建一个命名空间来封装给定名称(或URL前缀)内的视图。现在我想要创建一个命名空间(或者我应该叫它区域?),以便将所有管理员控制器封装在其中。
例如,我想要创建一个名为 Admin 的命名空间,在 www.myapp.com/admin/ 中,每当我访问时,它会获取 admin 控制器的 index 方法,并且每当我访问 www.myapp.com/admin/products 时,它会调用 product 控制器的 index 方法等等。此外,我还希望将这些控制器限制为必须登录的人使用。
从URL和路由的角度来看,我该如何实现上述内容呢?
2个回答

4

这个功能实际上在asp.net mvc中被称为区域(Areas)

在Visual Studio中右键单击项目,然后点击添加区域(add Area)。

现在你会得到一个子文件夹,其中包含Views、Controllers和Shared文件夹。此外,还会向项目添加一个路由。

问题: 如果你的区域中有一个HomeController,那么它将与网站根目录下的HomeController路由冲突。Steven Sanderson在他的书中提供了解决方法:

将默认路由更改为以下内容:

routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", // Parameter defaults
id = UrlParameter.Optional },
new [] { "MyAppName.Controllers" } // Prioritized namespace
);

请看 MDSN文章
关于Asp.net区域的视频请点击这里
Steven Sanderson写了一篇很好的文章,可以点击这里查看。

我还有一个问题。我是否需要重新制作我的模型/控制器,还是可以直接使用我在根应用程序中拥有的相同模型/控制器?我希望我的应用程序尽可能保持DRY。 - Gotjosh
你需要在每个区域下定义新的控制器。也许你可以编写基础控制器并适当地从它们派生。对于模型,由你决定。你可以将特定于某个区域的模型放置在该区域文件夹中(这样就会放在不同的命名空间中),或者将常见模型放置在根模型文件夹中,并从任何地方使用它们。 - gideon

0

MvcCodeRouting允许您使用命名空间层次结构组织控制器、视图和URL,它会反映在您的控制器上并自动为它们创建路由。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接