Несколько моделей в одном представлении?

Я относительно новичок в MVC и пытаюсь сделать код первым, чтобы создать одностраничную форму для заполнения и отправки пользователем. В настоящее время у меня есть несколько классов моделей в папке "Домен", но мне нужно иметь представление для отображения всех свойств каждой модели сразу для пользователя.

В дополнение к этому я пытаюсь заставить модели работать друг с другом. Например, один из классов модели содержит следующее:

namespace HROnboarding.Domain
{
    public class SoftwareNeeded
    {
        //Primitive Properties
        public int Id { get; set; }
        public string SoftwareName { get; set; } //piece of software (GIMP, VS13, etc)
        public bool isNeeded { get; set; } //whether or not it is needed by the user
    }
}

Это, однако, будет ненужным, если пользователь решит, что ему вообще не понадобится компьютер. Это свойство сохраняется в модели, показанной ниже:

namespace HROnboarding.Domain
{
    public class Employee
    {
        public int ID { get; set; }

        [DisplayName("First Name")]
        public string FirstName { get; set; }
        [DisplayName("Last Name")]
        public string LastName { get; set; }
        public string Department { get; set; }
        public string Position { get; set; }
        public bool NeedsPhone { get; set; }
        public bool NeedsComputer { get; set; }
        public bool NeedsCredit { get; set; }
    }
}

В настоящее время я сгенерировал "из коробки" MVC HomeController и связанные представления только для Employee, поэтому он показывает вышеуказанные свойства, доступные для изменения пользователю и для отправки.

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

Как я могу получить класс SoftwareNeeded для отображения на той же странице, чтобы он был доступен в то же время?

Я предполагаю, что мне нужно как-то создать файл общего вида, чтобы сортировать данные обоих классов и отображать их пользователю. Мой первый инстинкт состоит в том, чтобы поместить все данные класса модели в таблицу, чтобы они могли быть заполнены сразу и представлены целиком.

Я, очевидно, не очень уверен, куда идти дальше или даже правильно ли я подхожу к проблеме (ам).

Любая помощь с благодарностью, спасибо.

1 ответ

Решение

Один из способов сделать это - использовать ViewModel, которая будет состоять из типов моделей, необходимых представлению.

Например:

public class OnBoardEmployeeViewModel
{
   public Employee Employee { get; set; }
   public SoftwareNeeded SoftwareNeeded { get; set; }
}

Другой вариант - создать вашу ViewModel только из полей, отображаемых в представлении, а затем создать экземпляры ваших классов Model при отправке.

Некоторое дальнейшее чтение о моделях представления в MVC: http://sampathloku.blogspot.com/2012/10/how-to-use-viewmodel-with-aspnet-mvc.html

Другие вопросы по тегам