public IHtmlContent Render(IGridColumn column) { if (!column.FilterEnabled) { return(new HtmlString(string.Empty)); } //determine current column filter settings var filterSettings = new List <ColumnFilterValue>(); if (_settings.IsInitState(column) && column.InitialFilterSettings != ColumnFilterValue.Null) { filterSettings.Add(column.InitialFilterSettings); } else { filterSettings.AddRange(_settings.FilteredColumns.GetByColumn(column)); } bool isColumnFiltered = filterSettings.Any(); //determine current url: var builder = new CustomQueryStringBuilder(_settings.Query); var exceptQueryParameters = new List <string> { QueryStringFilterSettings.DefaultTypeQueryParameter, QueryStringFilterSettings.DefaultClearInitFilterQueryParameter }; string pagerParameterName = GetPagerQueryParameterName(((ISGrid)column.ParentGrid).Pager); if (!string.IsNullOrEmpty(pagerParameterName)) { exceptQueryParameters.Add(pagerParameterName); } string url = builder.GetQueryStringExcept(exceptQueryParameters); var clearInitFilter = _settings.Query[QueryStringFilterSettings.DefaultClearInitFilterQueryParameter]; var gridFilterButton = new TagBuilder("span"); gridFilterButton.AddCssClass(FilterButtonCss); if (isColumnFiltered) { gridFilterButton.AddCssClass(FilteredButtonCssClass); } gridFilterButton.Attributes.Add("title", Strings.FilterButtonTooltipText); var gridFilter = new TagBuilder("div"); var dataKeyList = new Dictionary <string, string> { { "data-type", column.FilterWidgetTypeName }, { "data-name", column.Name }, { "data-widgetdata", JsonHelper.JsonSerializer(column.FilterWidgetData) }, { "data-filterdata", JsonHelper.JsonSerializer(filterSettings) }, { "data-url", url }, { "data-clearinitfilter", clearInitFilter.ToString() } }; using (var sw = new StringWriter()) { gridFilterButton.WriteTo(sw, HtmlEncoder.Default); gridFilter.InnerHtml.SetHtmlContent(sw.ToString()); } gridFilter.AddCssClass("grid-filter"); foreach (var data in dataKeyList) { if (!string.IsNullOrWhiteSpace(data.Value)) { gridFilter.Attributes.Add(data.Key, data.Value); } } using (var sw = new StringWriter()) { gridFilter.WriteTo(sw, HtmlEncoder.Default); return(new HtmlString(sw.ToString())); } }