控制器可以管理多个模型吗
本文关键字:模型 管理 控制器 | 更新日期: 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
我想问的是:
据我所知,控制器只能与一个视图关联仅使用一个模型。
我把它翻译成:
- 只能有一个视图使用与特定控制器相关联的一个模型
我觉得是这样的:
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
的对象并将其传递给视图。
如果这些对你有意义,请告诉我。