Несколько моделей в одном представлении?
Я относительно новичок в 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