asp.net MVC4上相同文件夹上的视图的不同控制器

时间:2012-11-16 20:59:09

标签: asp.net-mvc asp.net-mvc-4 split controllers

我一直在研究这个问题。我发现了“MVC领域”,但我仍然无法做到我正在寻找的东西。

我的观点: 查看/  学生/课程  学生/信息  学生/状态  学生/ GeneralSituation  等等...

控制器:

控制器/学生

我想做的是:

我不想在一个“学生”控制器中拥有来自很多视图的所有代码。 有关如何在几个文件中“拆分”我的控制器的任何提示? 我只是在看最简单的方法,我不想对我的项目进行大的修改。

我正在使用MVC4。

提前致谢!..

即插即用

3 个答案:

答案 0 :(得分:2)

为什么不制作部分Controller类,从而将一个控制器拆分成一堆物理文件?

另外,“很多观点的代码”是什么意思?您是否使用单独的服务层并在那里执行业务逻辑,因为这是最佳实践。控制器意味着非常轻量级,代码如下:

public ActionMethod DoSomething()
{
    StudentViewModel vm = _studentService.GetSomeData();
    return View(vm);
}

答案 1 :(得分:1)

你可以做一个部分类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]
}

答案 2 :(得分:0)

区域不起作用的原因是什么?从你所描述的,我不明白为什么他们不会。

- 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

如果您设置了一个怪物控制器(或部分),您的控制器应该只有很少的实际“查看代码”。留下所有这些来查看模型 - 控制器只需传递所需的资源来构建视图数据,从而保持控制器的精简。

是的,

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 ...
     }
}