【问题标题】:Umbraco Razor c# Listing unique tagsUmbraco Razor c# 列出唯一标签
【发布时间】:2014-06-19 16:16:18
【问题描述】:

我一直在尝试使用 Razor 使用 Umbraco v6 创建博客。

这是我的第一个 Umbraco 项目,所以我仍在处理事情,但我已经设法让大部分工作按我想要的方式工作,但我想在侧面小部件中列出标签。

到目前为止,我有这个 -

@{
    var blogitems = Umbraco.Content("1188").Children.Where("Visible");

    foreach(var blog in blogitems) {
        var tagsplit = blog.tags.Split(',');
        foreach(var tag in tagsplit) {
                <li>                    
                        <a href="/blog/?@tag">@tag</a>
                </li>
        }
    }
}

问题是这列出了所有重复的标签。我试图在 tagsplit 变量上使用 .Distinct ,它只返回一个错误。

有什么想法吗?

【问题讨论】:

    标签: c# razor umbraco blogs umbraco-tags


    【解决方案1】:

    .Distinct() 应该可以工作,但既然不行,一个快速而肮脏的解决方案是:

    @{
        var blogitems = Umbraco.Content("1188").Children.Where("Visible");
    
        foreach(var blog in blogitems) {
            var tagsplit = blog.tags.Split(',');
            var usedTags=new List<string>();
            foreach(var tag in tagsplit) {
                if(!usedTags.Contains(tag)){
                    <li>                    
                            <a href="/blog/?@tag">@tag</a>
                    </li>
                }
                usedTags.Add(tag);
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      获取 Umbraco 中的所有标签:

      Umbraco.TagQuery.GetAllContentTags().OrderBy(t => t.Text)
      

      您的查询给您重复的原因是因为您的博客项目上有相同的标签,而您在错误的地方复制。

      var tagList = Umbraco.Content(1188).Children
          .Where("Visible")
          .SelectMany( c => c.tags.Split(',') )
          .Distinct()
          .OrderBy( x => x )
      

      将为您提供所有内容中所有标签的有序列表...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-09
        • 1970-01-01
        • 2013-04-11
        • 1970-01-01
        • 2011-10-30
        • 2012-09-30
        相关资源
        最近更新 更多