Может ли контроллер управлять более чем одной моделью? - PullRequest
0 голосов
/ 25 марта 2012

Я хочу, чтобы мой контроллер поместил modelA в viewA и modelB в viewB.

Из того, что я знаю, контроллер может быть связан только с одним представлением, используя только одну модель.

Поправьте меня, пожалуйста, если я ошибаюсь.

Ответы [ 2 ]

3 голосов
/ 25 марта 2012

Контроллер может производить только 1 просмотр за раз.

Но можно встроить некоторую условную логику в контроллер и решить, какие виды шоу.

контроллер может быть связан только с одним видом, используя только одну модель

Нет, контроллер CRUD обычно связывается с 1 моделью и создает список / редактирование / удаление / создание представлений.
Поэтому несколько представлений вполне нормально, так же как и несколько моделей представления. И ViewModel часто объединяет информацию из более чем 1 объекта Model.

0 голосов
/ 26 марта 2012

Я хочу, чтобы мой контроллер поместил модель А в представление А и модель В в представление B.

БО классы:

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");
      }
  }

Здесь один контроллер, четыре действия, одна модель. Таким образом, один контроллер связан с одной моделью, а не только с представлением (которое вы можете получить; удалив любые две другие функциональные возможности (не функции, функциональность Create имеет две функции, по одной для каждой 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 и передайте его представлениям.

Пожалуйста, дайте мне знать, если что-то из этого имеет для вас смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...