我想用2个ViewModel中的数据填充View中的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; }
}
这意味着我想在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()
,它们单独工作没问题。我只是不知道如何让它们在一个视图中协同工作。
答案 0 :(得分:4)
您需要更新视图的类型。
您没有将视图传递给Chat.Models.ChatLogsUsersViewModel
列表,您只有一个,此模型有两个列表。
因此请将其更新为:
@model Chat.Models.ChatLogsUsersViewModel
答案 1 :(得分:2)
您的模型是针对错误模型的强类型。正如Queti所说,你的模型应该输入@model Chat.Models.ChatLogsUsersViewModel
。
按原样,您的模型正在尝试访问这些模型的集合。如果你这样做,你会发现:
@for each (var x in Model) {
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>
}