我希望我的控制器将modelA
放入viewA
和modelB
放入viewB
。
据我所知,控制器只能使用一个模型与一个视图相关联。
如果我错了,请纠正我。
答案 0 :(得分:3)
Controller-action一次只能生成1个View。
但是可以在Controller中构建一些条件逻辑并决定哪个View 节目。
控制器只能使用一个模型与一个视图相关联
不,CRUD控制器通常与1个模型关联,并生成列表/编辑/删除/创建视图 所以多个View是很正常的,多个ViewModel也是如此。并且ViewModel经常将信息组合在一起,形成多个Model模型。
答案 1 :(得分:0)
我希望我的控制器将modelA放入viewA,将modelB放入viewB。
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");
}
}
这是一个控制器,四个动作,一个模型。因此,One Controller与一个模型相关联,但不仅仅是视图(您可以获得;通过删除任何其他两个功能(不是功能,创建功能有两个功能,一个用于GET和每个POST))
现在,问题出现了,你能在1个控制器中使用多个模型吗?
答案:是的。我只是在第一个代码示例中展示了它。
问题:1个控制器中可以有两个+型号吗?
答案:是的。创建一个包装器模型,将其他两个模型放入其中。和BAM!
如何?
(当然。叹气!)
MODEL | 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
的对象并将其传递给视图。
如果对您有任何意义,请告诉我。