C# 如何在一个视图中显示来自两个视图模型的数据

C# 如何在一个视图中显示来自两个视图模型的数据,c#,.net,asp.net-mvc,entity-framework,C#,.net,Asp.net Mvc,Entity Framework,我想用来自2个ViewModels的数据填充视图中的2个div,但我有一个问题 我的2个viewModels: public class ChatLogsNameTimeViewModel { public UserProfile UserProfile { get; set; } public string Message { get; set; } public DateTime Time { get; set; } } public class UserPro

我想用来自2个ViewModels的数据填充视图中的2个div,但我有一个问题

我的2个viewModels:

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; }
}
我的问题是根本无法访问ViewModel属性

在视图中创建foreach循环时,我只能访问以下内容:

这意味着我根本无法访问属性以在foreach中打印它们

我认为:

@model IEnumerable<Chat.Models.ChatLogsUsersViewModel>
@model IEnumerable

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

您需要更新视图的类型

您没有向视图传递Chat.Models.chatlogsUserViewModel的列表,您只有一个,而此模型有两个列表

因此,请将其更新为:

@model Chat.Models.ChatLogsUsersViewModel

您需要更新视图的类型

您没有向视图传递Chat.Models.chatlogsUserViewModel的列表,您只有一个,而此模型有两个列表

因此,请将其更新为:

@model Chat.Models.ChatLogsUsersViewModel

您的模型被强键入错误的模型。正如Queti所说,您的模型应该键入
@model Chat.Models.chatlogsuserviewmodel

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

@for each (var x in Model) {
    x.
}
x是一个单一的
chatlogsUserViewModel
,应该在您的开发环境中显示它的属性。但同样,这不是您希望在此处强键入模型的方式

如果我没有弄错的话,这就是您正在尝试做的,您仍然可以使用for-each循环访问数据:

@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>
}
@model Chat.Models.chatlogsUserViewModel
对于每个(var登录模型。\u chatLogs){
@@日志消息
}
...
对于每个(模型中的var用户。\u用户){
@@user.UserName
}

您的模型的强类型指向错误的模型。正如Queti所说,您的模型应该键入
@model Chat.Models.chatlogsuserviewmodel

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

@for each (var x in Model) {
    x.
}
x是一个单一的
chatlogsUserViewModel
,应该在您的开发环境中显示它的属性。但同样,这不是您希望在此处强键入模型的方式

如果我没有弄错的话,这就是您正在尝试做的,您仍然可以使用for-each循环访问数据:

@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>
}
@model Chat.Models.chatlogsUserViewModel
对于每个(var登录模型。\u chatLogs){
@@日志消息
}
...
对于每个(模型中的var用户。\u用户){
@@user.UserName
}

您应该能够使用模型访问列表。\u聊天记录和模型。\u用户应该能够使用模型访问列表。\u聊天记录和模型。\u用户如果不使用IEnumerable作为视图类型,则无法使用foreach循环。您所说的“这不是您希望在此处强键入模型的方式”是什么意思?你能详细说明一下吗您可以在任何IEnumerable集合上使用foreach循环。ViewModel不必是IEnumerable。在您的情况下,您可以通过我们建议的视图模型上的两个集合中的每一个进行foreach循环。我使用foreach循环修改了我的答案,这就是您试图做的吗?你们是对的。非常感谢。自从queti是第一个,我就给了他一个答案,谢谢你的修改,非常好的家伙。如果我不使用IEnumerable作为视图类型,我就不能使用foreach循环。您所说的“这不是您希望在此处强键入模型的方式”是什么意思?你能详细说明一下吗您可以在任何IEnumerable集合上使用foreach循环。ViewModel不必是IEnumerable。在您的情况下,您可以通过我们建议的视图模型上的两个集合中的每一个进行foreach循环。我使用foreach循环修改了我的答案,这就是您试图做的吗?你们是对的。非常感谢。我给了奎蒂一个答案,因为他是第一个,谢谢你的修改,非常好的家伙。