У меня есть две модели просмотра.Один отображает информацию о сотруднике, а другой - информацию обо всех экстренных контактах, добавленных к сотруднику (1-ко-многим).
Мне удается отображать их информацию отдельно, но по какой-то причине, когда я пытаюсь объединить их в одном представлении, что-то идет не так.
Сначала я подумал, что наилучший подход к сдерживанию всего этогоинформация в одном представлении будет просто создать 1 ViewModel и добавить все необходимые поля.Но затем, когда я добавил поля для экстренных контактов, которые являются «многим» частью отношений, я не был уверен, как выполнить итерацию по ним внутри одной и той же возвращаемой модели (1-ко-многим).Из-за этого я попытался создать комбинированное представление, используя Tuple <>.К сожалению, это тоже не очень хорошо.Любая помощь с благодарностью.
Класс модели: PersonInfoViewModel
public class PersonInfoViewModel
{
public int PersonId { get; set; }
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = "Surname")]
public string LastName { get; set; }
}
Класс модели: EmergencyContactViewModel
public class EmergencyContactViewModel
{
public int EmergencyContactId { get; set; }
[Display(Name = "First Name")]
public string EmergencyContactFirstName { get; set; }
[Display(Name = "Surname")]
public string EmergencyContactLastName { get; set; }
}
Класс модели: CombinedView
public class CombinedView
{
public Person PersonC { get; set; }
public List<EmergencyContact> EmergencyContactsList { get; set; }
}
Действие контроллера: CombinedView
public ActionResult CombinedView(int id)
{
var person = _context.People.Find(id);
ViewBag.PersonId = _context.People.Find(id);
if (person != null)
{
List<EmergencyContactViewModel> ec = new List<EmergencyContactViewModel>(id);
PersonInfoViewModel pi = new PersonInfoViewModel();
return View(Tuple.Create(pi, ec));
}
return View();
}
Действие контроллера: PersonInfo
public async Task<ActionResult> PersonInfoViewModel(int? id)
{
var person = await db.People.FindAsync(id);// pull record from DB by id
if (person != null)
return View(new PersonInfoViewModel()
{
FirstName = person.FirstName,
LastName = person.LastName
});
return View();
}
Действие контроллера: EmergencyContactViewModel
public ActionResult EmergencyContactViewModel(int? id)
{
List<EmergencyContact> emergecyContactsList = db.EmergencyContacts.ToList();
List<EmergencyContactViewModel> personVmList = emergecyContactsList.Select(x =>
new EmergencyContactViewModel
{
EmergencyContactId = x.EmergencyContactId,
EmergencyContactLastName = x.EmergencyContactLastName,
EmergencyContactFirstName = x.EmergencyContactFirstName,
}).ToList();
return View(personVmList);
}