Example #1
0
        private void DisplayTags(int? ownerId, int entityId)
        {
            // get tags
            var tags = new TagService()
                .Queryable()
                .Where(t => t.EntityTypeId == entityId && t.OwnerId == ownerId)
                .Select(t => new
                {
                    Id = t.Id,
                    Name = t.Name,
                    Count = t.TaggedItems.Count()
                })
                .OrderBy(t => t.Name);

            // create dictionary to group by first letter of name
            Dictionary<char, List<TagSummary>> tagAlphabit = new Dictionary<char, List<TagSummary>>();

            // load alphabit into dictionary
            for (char c = 'A'; c <= 'Z'; c++)
            {
                tagAlphabit.Add(c, new List<TagSummary>());
            }

            // load tags
            foreach (var tag in tags)
            {
                var tagSummary = new TagSummary { Id = tag.Id, Name = tag.Name, Count = tag.Count };
                tagAlphabit[(char)tag.Name.Substring(0, 1).ToUpper()[0]].Add(tagSummary);
            }

            // display tags
            StringBuilder tagOutput = new StringBuilder();
            StringBuilder letterOutput = new StringBuilder();

            letterOutput.Append("<ul class='list-inline tag-letterlist'>");
            tagOutput.Append("<ul class='list-unstyled taglist'>");
            foreach (var letterItem in tagAlphabit)
            {
                if (letterItem.Value.Count > 0)
                {
                    letterOutput.Append(String.Format("<li><a href='#{0}'>{0}</a></li>", letterItem.Key.ToString()));

                    // add tags to display
                    tagOutput.Append(String.Format("<li class='clearfix'><h3><a name='{0}'></a>{1}</h3><ul class='list-inline'>", letterItem.Key.ToString(), letterItem.Key.ToString()));

                    foreach (TagSummary tag in letterItem.Value)
                    {
                        Dictionary<string, string> queryString = new Dictionary<string, string>();
                        queryString.Add("tagId", tag.Id.ToString());
                        var detailPageUrl = LinkedPageUrl("DetailPage", queryString);

                        tagOutput.Append(string.Format("<a href='{0}'><span class='tag'>{1} <small>({2})</small></span></a>", detailPageUrl, tag.Name, tag.Count));
                    }

                    tagOutput.Append("</ul></li>");
                }
                else
                {
                    letterOutput.Append(String.Format("<li>{0}</li>", letterItem.Key.ToString()));
                }
                
                
            }

            tagOutput.Append("</ul>");
            letterOutput.Append("</ul>");

            // if no tags add message instead
            if (tags.Count() == 0)
            {
                tagOutput.Clear();
                tagOutput.Append("<div class='alert alert-info'><h4>Note</h4>No personal tags exist.</div>");
            }

            lTagList.Text = tagOutput.ToString();
            lLetters.Text = letterOutput.ToString();
        }