控制器可以管理多个型号吗?

时间:2012-03-25 16:04:25

标签: c# .net asp.net-mvc controller

我希望我的控制器将modelA放入viewAmodelB放入viewB

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

如果我错了,请纠正我。

2 个答案:

答案 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

我想问的是:

  

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

我将其翻译为:

  1. 只有一个视图消耗与特定控制器关联的一个模型。
  2. 我觉得这样:

    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的对象并将其传递给视图。

    如果对您有任何意义,请告诉我。