[英]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.