【发布时间】:2019-03-30 13:59:31
【问题描述】:
我有两个视图模型。一个显示员工信息,另一个显示有关添加到员工的任何紧急联系人的信息(一对多)。
我设法分别显示它们的信息,但由于某种原因,当我尝试将它们组合在一个视图中时出现问题。
起初我认为在一个视图中包含所有这些信息的最佳方法是创建 1 个 ViewModel 并添加所有必需的字段。但是当我添加紧急联系人字段时,这些字段是关系的“多”部分,我不确定如何在相同的返回模型中迭代它们(一对多)。因此,我尝试尝试使用 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; }
}
控制器动作:组合视图
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);
}
【问题讨论】:
-
您应该返回
CombinedView的实例(并在您的视图中使用循环来显示EmergencyContactsList)
标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-5