C# mvc模型中的foreach循环

C# mvc模型中的foreach循环,c#,asp.net-mvc,C#,Asp.net Mvc,我遇到了一个问题,试图让foreach代码块在mvc控制器和viewmodel中工作 我试图实现的是通过datetime值循环,如果小于60秒,则显示秒。如果超过60秒但少于1小时,则显示分钟。否则显示全天 我可以让上面的工作,但它只显示第一条记录。我曾尝试在不同的地方设置foreach循环,但似乎无法使其工作 如果有一双新的眼睛能帮上忙,我将不胜感激 public class MostRecentPostsViewModel { public List<Membe

我遇到了一个问题,试图让foreach代码块在mvc控制器和viewmodel中工作

我试图实现的是通过datetime值循环,如果小于60秒,则显示秒。如果超过60秒但少于1小时,则显示分钟。否则显示全天

我可以让上面的工作,但它只显示第一条记录。我曾尝试在不同的地方设置foreach循环,但似乎无法使其工作

如果有一双新的眼睛能帮上忙,我将不胜感激

public class MostRecentPostsViewModel
    {
        public List<MembersForumProperties> SelectMostRecentForumPosts { get; set; }
        public string DateAndTimeOfForumPosts                          { get; set; }
    }

    public class IsPostLessThanOneHour
    {
        public static string DisplayPostInMinutesOrSeconds(string displyMostRecentForumPosts)
        {
            string displayTime = string.Empty;

            //foreach (var postTime in mv.SelectMostRecentForumPosts)
            //{
            //    dte = postTime.ForumMemberDateTimePostedPost;
            //}

            DateTime dtn = DateTime.Now;
            DateTime timeOfPost = Convert.ToDateTime(displyMostRecentForumPosts);

            TimeSpan ts = dtn - timeOfPost;
            if (ts.TotalSeconds > 0 && ts.TotalSeconds < 60)
            {
                displayTime = "about " + ts.Seconds + " seconds ago";
            }
            else if (ts.TotalSeconds > 61 && ts.TotalSeconds < 3600)
            {
                displayTime = "about " + ts.Minutes + " minutes ago";
            }
            else
            {
                displayTime = displyMostRecentForumPosts;
            }
            return displayTime;
        }
    }

为什么不按原样发送日期并使用JS插件,例如

那么在你看来,

@model IEnumerable<MemberForumProperties>

<!-- Head section would need to be defined in your master page first -->
@section Head {
    <script src="jquery.timeago.js" type="text/javascript"></script>
    <script type="text/javascript">
        $.ready(function() {
            $("abbr.timeago").timeago();
        });
    </script>
}

@foreach (var m in Model)
{
    <abbr class="timeago" title='@m.ForumMemberDateTimePostedPost.ToString("s")' />   
}
@model IEnumerable<MemberForumProperties>

@foreach (var props in Model)
{
    <p>@props.ForumMemberDateTimePostedPost.ToRelativeTime()</p>   
}
您当前的设置看起来有点凌乱,可读性不强

解决方案

把它整理一下我会做的

public static class DateTimeExt
{
    public static string ToRelativeTime(this DateTime value)
    {
        // you could move the entire implementation of `DisplayPostInMinutesOrSeconds` to here
        return IsPostLessThanOneHour.DisplayPostInMinutesOrSeconds(value);
    }
}
...

public PartialViewResult MostRecentMembersPosts()
{
    return PartialView("pvMostRecentMembersPost", _imf.DisplayMostRecentForumPosts().ToList());
}
然后在你看来

@model IEnumerable<MemberForumProperties>

<!-- Head section would need to be defined in your master page first -->
@section Head {
    <script src="jquery.timeago.js" type="text/javascript"></script>
    <script type="text/javascript">
        $.ready(function() {
            $("abbr.timeago").timeago();
        });
    </script>
}

@foreach (var m in Model)
{
    <abbr class="timeago" title='@m.ForumMemberDateTimePostedPost.ToString("s")' />   
}
@model IEnumerable<MemberForumProperties>

@foreach (var props in Model)
{
    <p>@props.ForumMemberDateTimePostedPost.ToRelativeTime()</p>   
}
@model IEnumerable
@foreach(模型中的var道具)
{
@props.ForumMemberDateTimePostedPost.ToRelativeTime()

}
注释掉foreach循环的代码是否有目的?嗨,George,注释掉的foreach循环代码是以前的尝试,只是没有删除它如果我读对了,您想返回用户帖子中最近的时间戳吗?如果是这样,我想你可能想重新设计这个。使用查询调用DB,该查询通过应用
MAX
并由作者过滤来返回最近的post时间戳。然后在返回值上运行您的逻辑以显示相应的消息。嗨,Chris,不,如果不同的用户在60秒内发表评论,那么在论坛上发表评论的日期将是不同的,它将显示24秒前发布的内容,或者如果在4分钟前发布的时间超过60秒,那么通过实际向OP展示如何将该插件应用于其特定问题,这个答案将得到极大的改进,可能会有一个示例。目前,此答案有被标记和删除的风险,因为它不是一个很好的答案,它只是将用户指向其他地方,而没有解决他们的特定问题。@GeorgeStocker肯定会更新。但是,链接确实指向文档,这实际上是不言自明的。如果链接消失或文档移动,会发生什么?这就是我们不喜欢那些实际上只是链接的答案的部分原因。目前,您已经将您的答案变成了一个非常好的答案,在这里包括了我们需要解决的用户问题。嗨,James,谢谢,从未听说过,将使用它,但我真的很想知道如何解决我的问题服务器端,所以如果我再次遇到这个问题,我将知道如何解决它。@James谢谢您的代码和jquery代码,您的服务器端更具可读性,学习的乐趣:-)
@model IEnumerable<MemberForumProperties>

@foreach (var props in Model)
{
    <p>@props.ForumMemberDateTimePostedPost.ToRelativeTime()</p>   
}