如何在Razor中的循环的第一次迭代中不填充所有字段

问题描述

我有一个数据库填充的简单模型,我需要填充视图。

public class Chat
    {
        public Guid SessionId { get; set; }
        public DateTime MessageDateTime { get; set; }
        public string Message { get; set; }
        
        public Guid UserId { get; set; }
        public string LastName { get; set;}
}

查看

@model IEnumerable<Chat.Chat>
@if (Model != null && Model.Count() > 0)
{
    <div class="chats">
        @foreach (var item in Model)
        {
            <div class="chat-item flex-row" sessionId="@item.SessionId" data="@item.UserId">
                <div class="flex-column">
                    <div class="flex-row">
                        <h4 class="message-from">@item.LastName </h4>
                        <span class="message-time">@item.MessageDateTime</span>
                    </div>
                    <div class="flex-row">
                        <span class="message-body">@item.MessageContent</span>
                    </div>
                </div>
            </div>
        }
    </div>

}

此视图显示2个人之间的聊天。每个聊天都有自己的会话。和所有信使一样,我需要显示与我交流的人以及聊天中的最后一条消息。

如果只有2条消息,那么当我们从第一次迭代开始进入一个循环时,我们需要获取一个人的数据,然后再获取消息本身

我尝试使用按会话过滤所有消息并显示最后一条消息

var filteredMessages = Model.Where(p => p.SessionId != Guid.Empty)
                                .GroupBy(p => p.SessionId)
                                .Select(grp => grp.FirstOrDefault())
                                .OrderByDescending(d => d.MessageDateTime)
                                .ToList();

,但是此方法不能正确填写,它接收最后一条消息,但填写错误用户数据。例如,我与某个用户交流,我首先给他写信,他回答了,然后我又回答了。该视图将填充我的用户数据(需要笔友),并正确填写最后一条消息。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)