我想创建基于模块的结构,就像在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)
我需要做哪些更改?
答案 0 :(得分:2)
您面临的问题是MVC并不关心控制器所在的文件夹。实际上,它甚至不必位于名为Controllers的文件夹中。 MVC只查找名称中带有Controller的类名。一旦编译,文件夹结构就会丢失,因此,框架无法知道查看视图的子文件夹,因为编译后的代码中不再存在该信息。
你仍然可以这样做但是你不能再依赖MVC来自动查找你的视图文件,你必须直接传递每个视图名称。
这意味着你必须这样做:
return View("~/Views/School/Teacher/Index.cshtml");
而不是这个。
return View();
另一种选择是使用区域,允许您创建学校区域,然后您可以在学校区域内创建教师和学生控制器。