2012-07-13 35 views
0

我想创建基于模块的结构,就像在zend框架中一样。假设我有2个控制器,如学生和老师,我想把所有这些放在一个文件夹中,比如学校。同样我也想上学夹中的每个控制器,用于例如如何为asp .net mvc 3项目创建模块基础结构?

对于控制器的视图文件:

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) 

我需要什么样的变化呢?

+0

你可以使用一个叫做School的区域吗? – Daveo 2012-07-13 05:59:30

回答

2

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

然而,你仍然可以做到这一点,但是你不能再依靠MVC自动查找你的视图文件,你将不得不直接传递每个视图名称。

这意味着你将不得不这样做:

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

比这更确切。

return View(); 

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