首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >两个ViewModel元组

两个ViewModel元组
EN

Stack Overflow用户
提问于 2018-10-26 05:00:15
回答 1查看 91关注 0票数 0

我有两个视图模型。一个显示员工信息,另一个显示添加到员工的任何紧急联系人的信息(一对多)。

我设法将它们的信息分开显示,但由于某些原因,当我试图将它们组合到一个视图中时,事情就出错了。

起初,我认为在一个视图中包含所有这些信息的最好方法是只创建1个ViewModel并添加所有必需字段。但是,当我添加关系中的“多”部分的紧急联系人字段时,我不确定如何在同一返回模型中迭代它们(一对多)。正因为如此,我尝试使用Tuple<>创建一个组合视图。可悲的是,这也不是很顺利。非常感谢您的帮助。

模型类: PersonInfoViewModel

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
public class CombinedView
{
    public Person PersonC { get; set; }
    public List<EmergencyContact> EmergencyContactsList { get; set; }
}

控制器操作: CombinedView

代码语言:javascript
复制
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

代码语言:javascript
复制
    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

代码语言:javascript
复制
    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);
    }
EN

回答 1

Stack Overflow用户

发布于 2018-10-26 05:37:03

所以,答案很简单。正如斯蒂芬在上面提到的,我所要做的就是返回一个CombinedView实例。如果其他人像我一样被卡住了,这可能会对你有所帮助:

代码语言:javascript
复制
    public ActionResult CombinedView(int id)
    {
        var person = _context.People.Find(id);

        ViewBag.PersonId = _context.People.Find(id);

        if (person != null)
        {
            return View(new CombinedView()
            {
                PersonC = person,
                EmergencyContactsList = new List<EmergencyContact>(person.EmergencyContacts)
            });
        }

        return View();
    }

另外,在CombinedView中:

代码语言:javascript
复制
@model [appname].Models.CombinedView

此外,值得注意的是,我曾尝试重复相同的步骤,但这一次使用这个问题标题中提到的实际ViewModels,但到目前为止都失败了。

代码语言:javascript
复制
public ActionResult CombinedView2(int id)
    {
        var person = _context.People.Find(id);

        if (person != null)
        {
            return View(new CombinedView2()
            {
                PersonInfo = new PersonInfoViewModel(),
                EmergencyContactList = new List<EmergencyContactViewModel>()
            });
        }

        return View();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52998032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档