【问题标题】:Access Messages from Message Center从消息中心访问消息
【发布时间】:2021-01-28 09:33:06
【问题描述】:

您好,我正在尝试在主页上显示来自消息中心的前 5 条消息。但我不确定我做错了什么。我尝试从消息视图模型中获取消息,这是我的代码。

查看模型

@model Portal.ViewModel.MemberMessageViewModel

@foreach (var msg in Model.MessageList)

<div> @html.DisplayFor(modelItem => msg.CreatedOn) @html.DisplayFor(modelItem => msg.Subject) </div>

MessageViewModel.cs

public class MemberMessageViewModel : BaseViewModel { public string Subject { get; set; } public string CreatedOn { get; set}

   public List<MemberMessageViewModel> MessageList { get; set;}
}

控制器

public async Task<IActionResult> 

Homepage()
{
  string MESSAGE_PANEL_NAME = _configuration.GetSection(“TemplateStrings”).GetSection(“TEMPLATE_MESSAGECENTER”).Value;

try{
 memberHomepageVM.messageDetail = await _messageService.GetHomepageMessages(MESSAGE_PANEL_NAME, Lang);
}

Cshtml

@awaitHtml.PartialAsync(“_message”, Model.messageDetail)

【问题讨论】:

  • 我应该在foreach中使用ViewBag而不是模型ViewBag MessageList吗?
  • memberHomepageVM.messageDetail和MemberMessageViewModel是什么关系?根据您的代码和描述,我想在 Homepage 控制器中,您想从 _messageService 中获取前 5 条 MemberMessageViewModel 消息,然后将其显示在 Homepage 视图页面上,对吗?如果是这样的话,当你从 _messageService 查询数据时,你可以使用OrderByDescending() 将消息按一列排序,然后使用Take(5) 方法获取前 5 条消息,然后将其返回给查看页面并显示消息。

标签: javascript c# asp.net asp.net-core razor-pages


【解决方案1】:

要显示前5条记录,我们应该使用“OrderByDescending()”对消息进行排序,然后使用“Take(5)”方法得到前5条消息。

请参考以下示例代码:

  1. 根据您的 MemberMessageViewModel 创建服务,并设置初始数据:

       public class MessageService : IMessageService
         {   
            public List<MemberMessageViewModel> GetHomepageMessages()
             {
                 List<MemberMessageViewModel> messagelist = new List<MemberMessageViewModel>()
                 {
                     new MemberMessageViewModel(){ Subject="S1", CreatedOn=DateTime.Now.ToString()},
                     new MemberMessageViewModel(){ Subject="S2", CreatedOn=DateTime.Now.AddDays(-6).ToString()},
                     new MemberMessageViewModel(){ Subject="S3", CreatedOn=DateTime.Now.AddDays(-4).ToString()},
                     new MemberMessageViewModel(){ Subject="S4", CreatedOn=DateTime.Now.AddDays(-5).ToString()},
                     new MemberMessageViewModel(){ Subject="S5", CreatedOn=DateTime.Now.AddDays(2).ToString()},
                     new MemberMessageViewModel(){ Subject="S6", CreatedOn=DateTime.Now.AddDays(-8).ToString()},
                     new MemberMessageViewModel(){ Subject="S7", CreatedOn=DateTime.Now.AddDays(1).ToString()},
                 };
    
                 return messagelist;
             }
         }
    
  2. 在 Startup.ConfigureServices 方法中注册服务:

       services.AddScoped<IMessageService, MessageService>();
    
  3. 主页控制器:

     public async Task<IActionResult> Homepage()
     {
         //get the message list
         var messages = _messageService.GetHomepageMessages()
             .OrderByDescending(c => Convert.ToDateTime(c.CreatedOn))   //sort the message based on the CreatedOn property.
             .Take(5)  //take the top 5 messages.
             .ToList();
    
         //according to your view page bind model, it seems that you want to return a MemberMessageViewModel.
         MemberMessageViewModel member = new MemberMessageViewModel()
         {
             CreatedOn = DateTime.Now.ToString(),
             Subject = "Subject A",
             MessageList = messages,
         };
         //
         return View(member);
     }
    
  4. 主页查看页面(Homepage.cshtml):

         @model Test.Models.MemberMessageViewModel
    
         @foreach (var msg in Model.MessageList)
         { 
             <div>
                 @Html.DisplayFor(modelItem => msg.CreatedOn)
                 @Html.DisplayFor(modelItem => msg.Subject)
             </div><br/>
         }
    

输出如下:

此外,您还可以对查看页面中的消息进行排序和获取:

        @model Test.Models.MemberMessageViewModel

        @foreach (var msg in Model.MessageList.OrderByDescending(c => Convert.ToDateTime(c.CreatedOn)).Take(5))
        { 
            <div>
                @Html.DisplayFor(modelItem => msg.CreatedOn)
                @Html.DisplayFor(modelItem => msg.Subject)
            </div><br/>
        }

如果我误解了您的问题,请随时告诉我。

【讨论】:

    猜你喜欢
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多