0

我想用来自 2 个 ViewModel 的数据填充 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()在模型中实现,它们单独工作没问题。我只是不知道如何让它们在一个视图中协同工作。

4

2 回答 2

4

您需要更新视图的类型。

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

因此将其更新为:

@model Chat.Models.ChatLogsUsersViewModel
于 2013-08-08T02:50:39.820 回答
2

您的模型是针对错误模型的强类型。正如 Queti 所说,你的模型应该是 type @model Chat.Models.ChatLogsUsersViewModel

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

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

x 是一个单一的ChatLogsUsersViewModel,应该在你的开发环境中显示它的属性。但同样,这不是您想要在这里强烈键入模型的方式。

如果我没记错的话,这就是你想要做的,你仍然可以使用 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>
}
于 2013-08-08T03:03:23.187 回答