C# 如何在一个视图中显示来自两个视图模型的数据
我想用来自2个ViewModels的数据填充视图中的2个div,但我有一个问题 我的2个viewModels: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
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循环修改了我的答案,这就是您试图做的吗?你们是对的。非常感谢。我给了奎蒂一个答案,因为他是第一个,谢谢你的修改,非常好的家伙。