我一直在研究这个。我找到了“MVC 区域”,但我仍然无法做我正在寻找的东西。
我的观点:观点/学生/课程学生/信息学生/状态学生/GeneralSituation等,等等...
控制器:
控制器/学生
我想做的是:
我不想在一个“学生”控制器中拥有来自很多视图的所有代码。关于如何将控制器“拆分”为多个文件的任何提示?我只是在看最简单的方法,我不想对我的项目进行大的修改。
我正在使用 MVC4。
提前致谢!..
即插即用
我一直在研究这个。我找到了“MVC 区域”,但我仍然无法做我正在寻找的东西。
我的观点:观点/学生/课程学生/信息学生/状态学生/GeneralSituation等,等等...
控制器:
控制器/学生
我想做的是:
我不想在一个“学生”控制器中拥有来自很多视图的所有代码。关于如何将控制器“拆分”为多个文件的任何提示?我只是在看最简单的方法,我不想对我的项目进行大的修改。
我正在使用 MVC4。
提前致谢!..
即插即用
为什么不只创建部分控制器类,从而将一个控制器拆分为一堆物理文件?
另外,“来自很多观点的代码”是什么意思?您是否使用单独的服务层并在其中执行业务逻辑,因为这是最佳实践。控制器应该是非常轻量级的,代码如下:
public ActionMethod DoSomething()
{
StudentViewModel vm = _studentService.GetSomeData();
return View(vm);
}
你可以做一个部分类StudentController:
您的文件夹/文件如下所示:
Controllers
StudentController
StudentController.Status.cs
StudentController.GeneralSituation.cs
StudentController.Course.cs
代码将是:
StudentController.Status.cs:
public partial class StudentController
{
[Actions relevant for Status of a student]
}
StudentController.GeneralSituation.cs:
public partial class StudentController
{
[Actions relevant for General Situation of a student]
}
区域不起作用的任何原因?从你描述的情况来看,我真的不明白他们为什么不这样做。
- Areas
- Students
- Controllers
HomeController Handles base /Students/ route
InformationController ~/Students/Information/{action}/{id}
StatusController ~/Students/Status/{action}/{id}
...
- Models
- Views
Home/
Information/
Status/
...
Shared/ Stick common views in here
如果你设置在一个怪物控制器(或部分)上,你的控制器应该只有很少的实际“查看代码”。将所有这些留给视图模型 - 控制器只是传递所需的资源来构建视图数据,从而使控制器保持精简。
IE,
public class StudentController
{
...
// Actually I prefer to bind the id to a model and handle 404
// checking there, vs pushing that boiler plate code further down
// into the controller, but this is just a quick example.
public ActionResult Information(int id)
{
return View(new InformationPage(this.StudentService, id));
}
}
然后,InformationPage
您的模型之一将处理构建适用于该视图的所有信息。
public class InformationPage
{
public Student Student { get; set; }
public InformationPage(StudentService service, int studentId)
{
Student = service.FindStudent(studentId);
... Other view data ...
}
}