private void GeneratePagingTemplate()
        {
            if (_isPageable && string.IsNullOrWhiteSpace(_customPagingTemplateView))
            {
                if (GridTemplate.Templates.ContainsKey(_pagingTemplateId))
                {
                    return;
                }

                var sb = new StringBuilder();
                using (TextWriter writer = new StringWriter(sb))
                {
                    using (var wrappedHtmlHelper = new HtmlHelperWriterWrapped(_htmlHelper, writer))
                    {
                        using (var template = _htmlHelper.Incoding().Template <PagingModel>())
                        {
                            TagBuilder ul = new TagBuilder("ul");
                            ul.AddCssClass("pagination");

                            //sb.Append("<ul class=\"pagination\">");
                            using (var each = template.ForEach())
                            {
                                using (each.Is(r => r.Active))
                                {
                                    var li   = new TagBuilder("li");
                                    var link = new TagBuilder("a");
                                    link.MergeAttribute("href", "#!" + each.For(r => r.Page));
                                    link.InnerHtml.AppendHtml(each.For(r => r.Text));
                                    li.InnerHtml.AppendHtml(link);
                                    li.AddCssClass("active");
                                    ul.InnerHtml.AppendHtml(li);
                                }
                                using (each.Not(r => r.Active))
                                {
                                    var li   = new TagBuilder("li");
                                    var link = new TagBuilder("a");
                                    link.MergeAttribute("href", "#!" + each.For(r => r.Page));
                                    link.InnerHtml.AppendHtml(each.For(r => r.Text));
                                    li.InnerHtml.AppendHtml(link);
                                    ul.InnerHtml.AppendHtml(li);
                                }
                            }
                            ul.WriteTo(writer, HtmlEncoder.Default);
                        }
                    }
                }
                GridTemplate.Templates.TryAdd(_pagingTemplateId,
                                              new IncodingResult.JsonData(true, sb.ToString(), null, HttpStatusCode.OK).ToJsonString());
            }
        }
        private void GenerateRowTemplate()
        {
            if (GridTemplate.Templates.ContainsKey(_templateId))
            {
                return;
            }

            var sb = new StringBuilder();

            using (TextWriter writer = new StringWriter(sb))
            {
                using (var wrappedHtmlHelper = new HtmlHelperWriterWrapped(_htmlHelper, writer))
                {
                    using (var template = wrappedHtmlHelper.HtmlHelper.Incoding().Template <T>())
                    {
                        using (var each = template.ForEach())
                        {
                            var tbody = new TagBuilder("tbody");
                            foreach (var bodyAttr in this.TBodyAttrs)
                            {
                                tbody.MergeAttribute(bodyAttr.Key, bodyAttr.Value.Invoke(each).HtmlContentToString());
                            }

                            var tr = new TagBuilder("tr");

                            if (this.RowAttributes != null)
                            {
                                tr.MergeAttributes(this.RowAttributes);
                            }

                            if (this.RowTemplateClass != null)
                            {
                                tr.AddCssClass(this.RowTemplateClass.Invoke(each).HtmlContentToString());
                            }

                            foreach (var column in this._сolumnList)
                            {
                                var tdWidth = String.IsNullOrWhiteSpace(column.ColumnWidthPct)
                                    ? column.ColumnWidth
                                    : column.ColumnWidthPct;
                                var td = new TagBuilder("td");

                                if (column.Expression != null)
                                {
                                    if (column.IsRaw)
                                    {
                                        td.InnerHtml.Append("{{{" + column.Expression + "}}}");
                                    }
                                    else
                                    {
                                        td.InnerHtml.Append("{{" + column.Expression + "}}");
                                    }
                                }

                                if (column.Template != null)
                                {
                                    td.InnerHtml.AppendHtml(column.Template.Invoke(each));
                                }

                                if (column.ColumnAttributes != null)
                                {
                                    td.MergeAttributes(column.ColumnAttributes);
                                }

                                if (!String.IsNullOrWhiteSpace(tdWidth) &&
                                    (column.ColumnAttributes == null || !column.ColumnAttributes.ContainsKey("style")))
                                {
                                    td.MergeAttribute("style",
                                                      "width:{0}{1};".F(tdWidth,
                                                                        String.IsNullOrWhiteSpace(column.ColumnWidthPct) ? "px" : "%"));
                                }

                                if (!column.IsVisible)
                                {
                                    td.AddCssClass("hide");
                                }

                                tr.InnerHtml.AppendHtml(td);
                            }

                            tbody.InnerHtml.AppendHtml(tr);

                            if (this._nextRowList.Count > 0)
                            {
                                foreach (var row in this._nextRowList)
                                {
                                    var trNext = new TagBuilder("tr");

                                    if (row.MetaAttribute != null)
                                    {
                                        trNext.MergeAttributes(row.MetaAttribute(each).AsHtmlAttributes());
                                    }

                                    List <string> classes = row.GetClasses(each);
                                    foreach (var cls in classes)
                                    {
                                        trNext.AddCssClass(cls);
                                    }

                                    if (this.RowAttributes != null)
                                    {
                                        foreach (var att in this.RowAttributes)
                                        {
                                            if (att.Key == "class")
                                            {
                                                trNext.AddCssClass(att.Value.ToString());
                                            }
                                        }
                                        trNext.MergeAttributes(this.RowAttributes);
                                    }

                                    if (this.RowTemplateClass != null)
                                    {
                                        trNext.AddCssClass(this.RowTemplateClass.Invoke(each).HtmlContentToString());
                                    }

                                    var innerHtml = row.Content.Invoke(each);

                                    trNext.InnerHtml.AppendHtml(innerHtml);
                                    var trNextString = trNext.HtmlContentToString();
                                    if (row.HtmlAttributes != null)
                                    {
                                        trNextString = trNextString.Insert(3, " " + row.HtmlAttributes.Invoke(each).HtmlContentToString() + " ");
                                    }
                                    tbody.InnerHtml.AppendHtml(trNextString);
                                }
                            }
                            tbody.WriteTo(writer, HtmlEncoder.Default);
                        }
                    }
                }
            }

            GridTemplate.Templates.TryAdd(_templateId,
                                          new IncodingResult.JsonData(true, sb.ToString(), null, HttpStatusCode.OK).ToJsonString());
        }