Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC中等效的名称空间?_C#_Asp.net_Asp.net Mvc_Routing - Fatal编程技术网

C# ASP.NET MVC中等效的名称空间?

C# ASP.NET MVC中等效的名称空间?,c#,asp.net,asp.net-mvc,routing,C#,Asp.net,Asp.net Mvc,Routing,在rails中,我可以创建一个名称空间,以便将视图封装在给定的名称(或URL前缀)中 我想做的是创建一个名称空间(或者我认为是区域?),将所有管理员控制器封装在一个给定的名称中 例如,我想创建一个管理员名称空间,每当我访问www.myapp.com/Admin/时,它都会使用index方法将我作为控制器管理员,每当我访问www.myapp.com/admin/products时,它都会使用索引方法调用产品控制器,以此类推,因为我还想将这些控制器限制为必须登录的用户 就URL和路由而言,如何实现前

在rails中,我可以创建一个名称空间,以便将视图封装在给定的名称(或URL前缀)中

我想做的是创建一个名称空间(或者我认为是区域?),将所有管理员控制器封装在一个给定的名称中

例如,我想创建一个管理员名称空间,每当我访问www.myapp.com/Admin/时,它都会使用index方法将我作为控制器管理员,每当我访问www.myapp.com/admin/products时,它都会使用索引方法调用产品控制器,以此类推,因为我还想将这些控制器限制为必须登录的用户


就URL和路由而言,如何实现前面提到的功能?

实际上,asp.net mvc中的功能被称为区域

在VisualStudio中右键单击项目,然后单击“添加区域”

现在,您将拥有一个子文件夹,其中包含用于视图、控制器和共享文件夹的文件夹。此外,还会将管线添加到项目中

障碍: 在这种情况下,如果您的某个区域内有
HomeController
,则会导致问题,因为它将与网站根目录的
HomeController
路由冲突。史蒂文·桑德森在他的书中对此进行了修正:

将默认路线更改为:

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
);


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

不过,我还有一个问题。我是否必须重新制作模型/控制器,或者我不能只使用根应用程序中的相同模型/控制器?我希望我的应用程序尽可能保持干燥。你必须在每个区域下定义新的控制器。也许您可以编写基本控制器并从中适当地派生。对于模特来说,这取决于你。您可以将特定于某个区域的模型放置在area文件夹中(该文件夹反过来放置在不同的命名空间中),也可以将公共模型放置在根模型文件夹中,并从任意位置使用它们。