繁体   English   中英

如何在一个视图中显示来自两个ViewModel的数据

[英]How to show data from two ViewModels in one View

我想用2个ViewModels的数据填充View中的2个div,但是我遇到了问题。

我的2个视图模型:

public class ChatLogsNameTimeViewModel
{
    public UserProfile UserProfile { get; set; }

    public string Message { get; set; }

    public DateTime Time { get; set; }
}

public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }

    public string UserName { get; set; }

    public string Email { get; set; }

    public bool IsOnline { get; set; }

    public virtual ICollection<ChatLogs> ChatLogs { get; set; }
}

这意味着我想在View的一个div中显示来自ChatLogsNameTimeViewModel的数据,并在View的另一div中显示UserProfile中的数据。

这是我的ViewModel,它使用上面的两个viewModel:

public class ChatLogsUsersViewModel
{
    public IEnumerable<ChatLogsNameTimeViewModel> ChatLogs { get; set; }

    public IEnumerable<UserProfile> Users { get; set; }
}

这是我在控制器中的Index()动作:

var chatLogs = db.getChatLog().ToList();
var users = dba.getOnlineUsers().ToList();

var view = new ChatLogsUsersViewModel(chatLogs, users);
return View(view);

我的问题是我根本无法访问ViewModel属性。

当我在视图中创建foreach循环时,我可以访问的是:

在此处输入图片说明 这意味着我根本无法访问属性以在foreach中打印它们。

我有这个观点:

@model IEnumerable<Chat.Models.ChatLogsUsersViewModel>

我假设我在控制器中做的事情不正确。 我有在模型中实现的方法getChatLog()getOnlineUsers() ,它们可以单独工作没有问题。 我只是不知道如何使它们在一个视图中一起工作。

您需要更新视图的类型。

您没有在视图中传递Chat.Models.ChatLogsUsersViewModel的列表,您只有一个,并且此模型有两个列表。

因此,将其更新为:

@model Chat.Models.ChatLogsUsersViewModel

您的模型被强力输入错误的模型。 正如Queti所说,您的模型应输入@model Chat.Models.ChatLogsUsersViewModel

照原样,您的模型正在尝试访问这些模型的集合。 您会发现,如果您这样做:

@for each (var x in Model) {
    x.
}

x是一个单独的ChatLogsUsersViewModel ,应在您的开发环境中显示其属性。 但是,这又不是您要在此处强烈键入模型的方式。

如果我没记错的话,这就是您要尝试做的事情,您仍然可以使用for每个循环访问数据:

@model Chat.Models.ChatLogsUsersViewModel

for each (var log in Model._chatLogs) {
    @<div>@log.Message</div>
}
...
for each (var user in Model._users) {
    @<div>@user.UserName</div>
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM