如何为asp .net mvc 3项目制作模块基础结构?

时间:2012-07-13 05:56:18

标签: asp.net-mvc asp.net-mvc-3

我想创建基于模块的结构,就像在zend框架中一样。假设我有两个控制器,如学生和老师,我想把所有这些放在一个文件夹说shchool。同样的方式我想要学校文件夹中每个控制器的视图文件,例如

对于控制器:

D:\aspprojects\Project1\Project1\Controllers\School\TeacherController.cs
D:\aspprojects\Project1\Project1\Controllers\School\StudentController.cs

和视图文件:

D:\aspprojects\Project1\Project1\Views\School\Teacher\all CRUD files(*.cshtml)
D:\aspprojects\Project1\Project1\Views\School\Student\all CRUD files(*.cshtml)

目前的结构如下所示,

控制器的

D:\aspprojects\Project1\Project1\Controllers\TeacherController.cs
D:\aspprojects\Project1\Project1\Controllers\StudentController.cs

对于视图文件

D:\aspprojects\Project1\Project1\Views\Teacher\all CRUD files(*.cshtml)
D:\aspprojects\Project1\Project1\Views\Student\all CRUD files(*.cshtml)

我需要做哪些更改?

1 个答案:

答案 0 :(得分:2)

您面临的问题是MVC并不关心控制器所在的文件夹。实际上,它甚至不必位于名为Controllers的文件夹中。 MVC只查找名称中带有Controller的类名。一旦编译,文件夹结构就会丢失,因此,框架无法知道查看视图的子文件夹,因为编译后的代码中不再存在该信息。

你仍然可以这样做但是你不能再依赖MVC来自动查找你的视图文件,你必须直接传递每个视图名称。

这意味着你必须这样做:

return View("~/Views/School/Teacher/Index.cshtml");

而不是这个。

return View();

另一种选择是使用区域,允许您创建学校区域,然后您可以在学校区域内创建教师和学生控制器。