控制器可以管理多个模型吗

本文关键字:模型 管理 控制器 | 更新日期: 2023-09-27 18:28:53

我希望我的控制器将modelA放入viewA,将modelB放入viewB

据我所知,一个控制器只能使用一个模型与一个视图相关联。

如果我错了,请纠正我。

控制器可以管理多个模型吗

控制器操作一次只能生成一个视图。

但是,可以在控制器中构建一些条件逻辑,并决定要使用哪些视图显示

控制器可以仅使用一个模型与一个视图相关联

否,CRUD控制器通常与1 Model关联,并生成List/Edit/Delete/Create Views
因此,多个视图是很正常的,多个ViewModel也是如此。一个ViewModel通常将多个Model实体的信息组合在一起。

我希望我的控制器将模型A放入视图A,将模型B放入视图B。

BO类:

class modelA{
...
}
class modelB{
...
}

控制器代码:

...other using statements...
using MyProj.DAL;
using MyProj.BO;
public class MyController:Controller
{
//Create object of your Data Access Layer's MyDAL functionality
MyDAL DALobj = new MyDAL();

public ActionResult viewAList(){
modelA mobj = DALobj.FetchObjFromDB();
return View(mobj);
}
public ActionResult viewACreate(modelA newobj){
...check if modelstate is okay and tweak your model object here...
DALobj.SendDataToDB(newobj);
return RedirectToView("some other view | index");
}

public ActionResult viewBList(){
...same as viewAList() but with modelB this time...
}
public ActionResult viewBCreate(){
...same as viewACreate() but with modelB this time...
}
}//controller ends here

我想问的是:

据我所知,控制器只能与一个视图关联仅使用一个模型。

我把它翻译成:

  1. 只能有一个视图使用与特定控制器相关联的一个模型

我觉得是这样的:

public class PersonController : Controller
{
      static List<Person> people = new List<Person>();
      public ActionResult Index()
      {
          return View(people);
      }
      public ActionResult Details(Person person)
      {
          return View(person);
      }
      public ActionResult Create()
      {
          return View();
      } 
      [AcceptVerbs(HttpVerbs.Post)]
      public ActionResult Create(Person person)
      {
          if (!ModelState.IsValid)
          {
              return View("Create", person);
          }
          people.Add(person);
          return RedirectToAction("Index");
      }
  }

这是一个控制器,四个动作,一个模型。因此,一个控制器与一个模型相关联,但不仅仅是视图(您可以获得;通过删除任何其他两个功能(不是功能,创建功能有两个功能,每个用于get和POST)

现在,问题来了,你们能在一个控制器中使用多个模型吗?

回答:是的。我刚刚在第一个代码示例中展示了它。

问题:一个控制器中可以有两个以上的型号吗?

回答:是的。创建一个包装模型,将另外两个模型放入其中!

如何?

(当然。叹气!)

型号|BO:

public class BigObjClass{
public A a; 
public B b;
}
public class A{
public int serial{get;}
public int age{get;set;}
}
public class B{
public string Name{get;}
public string Address{get;set;}
}

现在,与第一个代码示例一样,使用BigObjClass的对象并将其传递给视图。

如果这些对你有意义,请告诉我。