Ejemplo n.º 1
0
        /// <summary>
        /// Writes the value controls.
        /// </summary>
        /// <param name="writer">The writer.</param>
        /// <param name="nameAndValue">The name and value.</param>
        /// <param name="values">The values.</param>
        private void WriteValueControls(HtmlTextWriter writer, string[] nameAndValue, Dictionary <string, string> values)
        {
            if (values != null && values.Any())
            {
                DropDownList ddl = new DropDownList();
                ddl.AddCssClass("key-value-value form-control input-width-md js-key-value-input");
                ddl.DataTextField  = "Value";
                ddl.DataValueField = "Key";
                ddl.DataSource     = values;
                ddl.DataBind();
                if (nameAndValue.Length >= 2)
                {
                    ddl.SelectedValue = HttpUtility.UrlDecode(nameAndValue[1]);
                }
                ddl.RenderControl(writer);
            }
            else
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "key-value-value form-control input-width-md js-key-value-input");
                writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
                writer.AddAttribute(HtmlTextWriterAttribute.Value, nameAndValue.Length >= 2 ? nameAndValue[1] : string.Empty);
                writer.AddAttribute("placeholder", ValuePrompt);
                writer.RenderBeginTag(HtmlTextWriterTag.Input);
                writer.RenderEndTag();
            }

            writer.Write(" ");
            writer.WriteLine();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Writes the key controls.
        /// </summary>
        /// <param name="writer">The writer.</param>
        /// <param name="nameAndValue">The name and value.</param>
        private void WriteKeyControls(HtmlTextWriter writer, string[] nameAndValue)
        {
            if (CustomKeys != null && CustomKeys.Any())
            {
                DropDownList ddl = new DropDownList();
                ddl.AddCssClass("key-value-key form-control input-width-md js-key-value-input");
                ddl.DataTextField  = "Value";
                ddl.DataValueField = "Key";
                ddl.DataSource     = CustomKeys;
                ddl.DataBind();
                if (nameAndValue.Length >= 1)
                {
                    ddl.SelectedValue = nameAndValue[0];
                }
                ddl.RenderControl(writer);
            }
            else
            {
                // Write Name
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "key-value-key form-control input-width-md js-key-value-input");
                writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
                writer.AddAttribute(HtmlTextWriterAttribute.Value, nameAndValue.Length >= 1 ? nameAndValue[0] : string.Empty);
                writer.AddAttribute("placeholder", KeyPrompt);
                writer.RenderBeginTag(HtmlTextWriterTag.Input);
                writer.RenderEndTag();
            }

            writer.Write(" ");
            writer.WriteLine();
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Renders the entity fields controls.
        /// </summary>
        /// <param name="entityType">Type of the entity.</param>
        /// <param name="filterControl">The filter control.</param>
        /// <param name="writer">The writer.</param>
        /// <param name="entityFields">The entity fields.</param>
        /// <param name="ddlEntityField">The DDL entity field.</param>
        /// <param name="propertyControls">The property controls.</param>
        /// <param name="propertyControlsPrefix">The property controls prefix.</param>
        /// <param name="filterMode">The filter mode.</param>
        public void RenderEntityFieldsControls(Type entityType, FilterField filterControl, HtmlTextWriter writer, List <EntityField> entityFields,
                                               DropDownList ddlEntityField, List <Control> propertyControls, string propertyControlsPrefix, FilterMode filterMode)
        {
            string selectedEntityField = ddlEntityField.SelectedValue;

            writer.AddAttribute("class", "row");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);

            bool entityFieldPickerIsHidden = filterMode == FilterMode.SimpleFilter;

            if (entityFieldPickerIsHidden)
            {
                ddlEntityField.Style[HtmlTextWriterStyle.Display] = "none";
            }

            if (!entityFieldPickerIsHidden)
            {
                writer.AddAttribute("class", "col-md-3");
                writer.RenderBeginTag(HtmlTextWriterTag.Div);
                ddlEntityField.AddCssClass("entity-property-selection");
                ddlEntityField.RenderControl(writer);
                writer.RenderEndTag();
            }
            else
            {
                // render it as hidden (we'll need the postback value)
                ddlEntityField.RenderControl(writer);
            }

            writer.AddAttribute("class", entityFieldPickerIsHidden ? "col-md-12" : "col-md-9");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);

            if (entityFieldPickerIsHidden && ddlEntityField.SelectedItem != null)
            {
                var filterLabel = filterControl.Label ?? ddlEntityField.SelectedItem.Text;
                if (filterControl.ShowCheckbox)
                {
                    // special case when a filter is a entity field filter: render the checkbox here instead of in FilterField.cs
                    filterControl.cbIncludeFilter.Text = filterLabel;
                    filterControl.cbIncludeFilter.RenderControl(writer);
                }
            }

            // generate result for "none"
            StringBuilder sb         = new StringBuilder();
            string        lineFormat = @"
            case '{0}': {1}; break;";

            int fieldIndex = 0;

            sb.AppendFormat(lineFormat, fieldIndex, "result = ''");
            fieldIndex++;

            // render empty row for "none"
            writer.AddAttribute("class", "row field-criteria");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);
            writer.RenderEndTag();  // "row field-criteria"

            // render the controls for the selectedEntityField
            string controlId = string.Format("{0}_{1}", propertyControlsPrefix, selectedEntityField);
            var    control   = propertyControls.FirstOrDefault(c => c.ID == controlId);

            if (control != null)
            {
                if (control is IAttributeAccessor)
                {
                    (control as IAttributeAccessor).SetAttribute("data-entity-field-name", selectedEntityField);
                }

                control.RenderControl(writer);
            }

            // create a javascript block for all the possible entityFields which will get rendered once per entityType
            foreach (var entityField in entityFields)
            {
                string clientFormatSelection = entityField.FieldType.Field.GetFilterFormatScript(entityField.FieldConfig, entityField.TitleWithoutQualifier);

                if (clientFormatSelection != string.Empty)
                {
                    sb.AppendFormat(lineFormat, entityField.UniqueName, clientFormatSelection);
                }

                fieldIndex++;
            }

            writer.RenderEndTag();  // col-md-9 or col-md-12

            writer.RenderEndTag();  // "row"

            string scriptFormat = @"
    function {0}PropertySelection($content){{
        var selectedFieldName = $('select.entity-property-selection', $content).find(':selected').val();
        if (!selectedFieldName || selectedFieldName == '') {{
            selectedFieldName = '0'
        }}
        var $selectedContent = $('[data-entity-field-name=' + selectedFieldName + ']', $content)
        var result = '';
        switch(selectedFieldName) {{
            {1}
        }}
        return result;
    }}
";

            string script = string.Format(scriptFormat, entityType.Name, sb.ToString());

            ScriptManager.RegisterStartupScript(filterControl, typeof(FilterField), entityType.Name + "-property-selection", script, true);

            RegisterFilterCompareChangeScript(filterControl);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Renders the base control.
        /// </summary>
        /// <param name="writer">The writer.</param>
        public virtual void RenderBaseControl(HtmlTextWriter writer)
        {
            Dictionary <string, string> definedValues = null;

            if (DefinedTypeId.HasValue)
            {
                definedValues = new Dictionary <string, string>();
                new DefinedValueService(new RockContext())
                .GetByDefinedTypeId(DefinedTypeId.Value)
                .ToList()
                .ForEach(v => definedValues.Add(v.Id.ToString(), v.Value));
            }
            else if (CustomValues != null)
            {
                definedValues = CustomValues;
            }

            writer.AddAttribute(HtmlTextWriterAttribute.Class, "value-list");
            writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID);
            writer.RenderBeginTag(HtmlTextWriterTag.Span);
            writer.WriteLine();

            _hfValue.RenderControl(writer);
            _hfValueDisableVrm.RenderControl(writer);

            writer.WriteLine();

            StringBuilder valueHtml = new StringBuilder();

            valueHtml.Append(@"<div class=""controls controls-row form-control-group"">");
            if (definedValues != null && definedValues.Any())
            {
                valueHtml.Append(@"<select class=""form-control input-width-lg js-value-list-input"">");
                foreach (var definedValue in definedValues)
                {
                    valueHtml.AppendFormat(@"<option value=""{0}"">{1}</option>", definedValue.Key, definedValue.Value);
                }
                valueHtml.Append(@"</select>");
            }
            else
            {
                valueHtml.AppendFormat(@"<input class=""form-control input-width-lg js-value-list-input"" type=""text"" placeholder=""{0}""></input>", ValuePrompt);
            }
            valueHtml.Append(@"<a href=""#"" class=""btn btn-sm btn-danger value-list-remove""><i class=""fa fa-minus-circle""></i></a></div>");

            var hfValueHtml = new HtmlInputHidden();

            hfValueHtml.AddCssClass("js-value-list-html");
            hfValueHtml.Value = valueHtml.ToString();
            hfValueHtml.RenderControl(writer);

            writer.AddAttribute(HtmlTextWriterAttribute.Class, "value-list-rows");
            writer.RenderBeginTag(HtmlTextWriterTag.Span);
            writer.WriteLine();


            string[] values = this.Value.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string value in values)
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "controls controls-row form-control-group");
                writer.RenderBeginTag(HtmlTextWriterTag.Div);
                writer.WriteLine();

                if (definedValues != null && definedValues.Any())
                {
                    DropDownList ddl = new DropDownList();
                    ddl.AddCssClass("form-control input-width-lg js-value-list-input");
                    ddl.DataTextField  = "Value";
                    ddl.DataValueField = "Key";
                    ddl.DataSource     = definedValues;
                    ddl.DataBind();
                    ddl.SelectedValue = value;
                    ddl.RenderControl(writer);
                }
                else
                {
                    writer.AddAttribute(HtmlTextWriterAttribute.Class, "form-control input-width-lg js-value-list-input");
                    writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
                    writer.AddAttribute("placeholder", ValuePrompt);
                    writer.AddAttribute(HtmlTextWriterAttribute.Value, value);
                    writer.RenderBeginTag(HtmlTextWriterTag.Input);
                    writer.RenderEndTag();
                }

                writer.Write(" ");
                writer.WriteLine();

                // Write Remove Button
                writer.AddAttribute(HtmlTextWriterAttribute.Href, "#");
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "btn btn-sm btn-danger value-list-remove");
                writer.RenderBeginTag(HtmlTextWriterTag.A);
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "fa fa-minus-circle");
                writer.RenderBeginTag(HtmlTextWriterTag.I);
                writer.RenderEndTag();
                writer.RenderEndTag();
                writer.WriteLine();

                writer.RenderEndTag();
                writer.WriteLine();
            }

            writer.RenderEndTag();
            writer.WriteLine();

            writer.AddAttribute(HtmlTextWriterAttribute.Class, "actions");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);

            writer.AddAttribute(HtmlTextWriterAttribute.Class, "btn btn-action btn-xs value-list-add");
            writer.AddAttribute(HtmlTextWriterAttribute.Href, "#");
            writer.RenderBeginTag(HtmlTextWriterTag.A);
            writer.AddAttribute(HtmlTextWriterAttribute.Class, "fa fa-plus-circle");
            writer.RenderBeginTag(HtmlTextWriterTag.I);

            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.WriteLine();

            writer.RenderEndTag();
            writer.WriteLine();

            RegisterClientScript();
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Outputs server control content to a provided <see cref="T:System.Web.UI.HtmlTextWriter" /> object and stores tracing information about the control if tracing is enabled.
        /// </summary>
        /// <param name="writer">The <see cref="T:System.Web.UI.HtmlTextWriter" /> object that receives the control content.</param>
        public override void RenderControl(HtmlTextWriter writer)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Class, "key-value-list");
            writer.RenderBeginTag(HtmlTextWriterTag.Span);
            writer.WriteLine();

            base.RenderControl(writer);
            writer.WriteBreak();
            writer.WriteLine();

            writer.AddAttribute(HtmlTextWriterAttribute.Class, "key-value-rows");
            writer.RenderBeginTag(HtmlTextWriterTag.Span);
            writer.WriteLine();

            List <DefinedValue> values = null;

            if (DefinedTypeId.HasValue)
            {
                values = new DefinedValueService().GetByDefinedTypeId(DefinedTypeId.Value).ToList();
            }

            string[] nameValues = this.Value.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string nameValue in nameValues)
            {
                string[] nameAndValue = nameValue.Split(new char[] { '^' }, StringSplitOptions.RemoveEmptyEntries);

                writer.AddAttribute(HtmlTextWriterAttribute.Class, "controls controls-row");
                writer.RenderBeginTag(HtmlTextWriterTag.Div);
                writer.WriteLine();

                // Write Name
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "span3 key-value-key");
                writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
                writer.AddAttribute(HtmlTextWriterAttribute.Value, nameAndValue.Length >= 1 ? nameAndValue[0] : string.Empty);
                writer.AddAttribute("placeholder", "Key");
                writer.RenderBeginTag(HtmlTextWriterTag.Input);
                writer.RenderEndTag();
                writer.Write(" ");
                writer.WriteLine();

                // Write Value
                if (values == null)
                {
                    writer.AddAttribute(HtmlTextWriterAttribute.Class, "span4 key-value-value");
                    writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
                    writer.AddAttribute("placeholder", "Value");
                    writer.AddAttribute(HtmlTextWriterAttribute.Value, nameAndValue.Length >= 2 ? nameAndValue[1] : string.Empty);
                    writer.RenderBeginTag(HtmlTextWriterTag.Input);
                    writer.RenderEndTag();
                }
                else
                {
                    DropDownList ddl = new DropDownList();
                    ddl.AddCssClass("key-value-value");
                    ddl.DataTextField  = "Name";
                    ddl.DataValueField = "Id";
                    ddl.DataSource     = values;
                    ddl.DataBind();
                    ddl.Items.Insert(0, new ListItem(string.Empty, string.Empty));
                    if (nameAndValue.Length >= 2)
                    {
                        ddl.SelectedValue = nameAndValue[1];
                    }
                    ddl.RenderControl(writer);
                }

                writer.Write(" ");
                writer.WriteLine();

                // Write Remove Button
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "btn key-value-remove");
                writer.AddAttribute(HtmlTextWriterAttribute.Href, "#");
                writer.RenderBeginTag(HtmlTextWriterTag.A);
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "fa fa-minus-circle");
                writer.RenderBeginTag(HtmlTextWriterTag.I);
                writer.RenderEndTag();
                writer.RenderEndTag();
                writer.WriteLine();

                writer.RenderEndTag();
                writer.WriteLine();
            }

            writer.RenderEndTag();
            writer.WriteLine();

            writer.AddAttribute(HtmlTextWriterAttribute.Class, "btn key-value-add");
            writer.AddAttribute(HtmlTextWriterAttribute.Href, "#");
            writer.RenderBeginTag(HtmlTextWriterTag.A);
            writer.AddAttribute(HtmlTextWriterAttribute.Class, "fa fa-plus-circle");
            writer.RenderBeginTag(HtmlTextWriterTag.I);
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.WriteLine();

            writer.RenderEndTag();
            writer.WriteLine();

            RegisterClientScript(values);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Renders the base control.
        /// </summary>
        /// <param name="writer">The writer.</param>
        public override void RenderBaseControl(HtmlTextWriter writer)
        {
            Dictionary <string, string> values = null;

            if (DefinedTypeId.HasValue)
            {
                values = new Dictionary <string, string>();
                new DefinedValueService(new RockContext())
                .GetByDefinedTypeId(DefinedTypeId.Value)
                .ToList()
                .ForEach(v => values.Add(v.Id.ToString(), v.Value));
            }
            else if (CustomValues != null)
            {
                values = CustomValues;
            }

            writer.AddAttribute(HtmlTextWriterAttribute.Class, "key-value-list " + this.CssClass);
            writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID);
            writer.RenderBeginTag(HtmlTextWriterTag.Span);
            writer.WriteLine();

            _hfValue.RenderControl(writer);
            writer.WriteLine();

            StringBuilder html = new StringBuilder();

            html.Append(@"<div class=""controls controls-row form-control-group"">");
            if (CustomKeys != null && CustomKeys.Any())
            {
                html.Append(@"<select class=""key-value-key form-control input-width-md js-key-value-input"">");
                foreach (var key in CustomKeys)
                {
                    html.AppendFormat(@"<option value=""{0}"">{1}</option>", key.Key, key.Value);
                }
                html.Append(@"</select>");
            }
            else
            {
                html.AppendFormat(@"<input class=""key-value-key form-control input-width-md js-key-value-input"" type=""text"" placeholder=""{0}""></input> ", KeyPrompt);
            }

            if (values != null)
            {
                html.Append(@"<select class=""key-value-value form-control input-width-md js-key-value-input"">");
                foreach (var value in values)
                {
                    html.AppendFormat(@"<option value=""{0}"">{1}</option>", value.Key, value.Value);
                }
                html.Append(@"</select>");
            }
            else
            {
                html.AppendFormat(@"<input class=""key-value-value input-width-md form-control js-key-value-input"" type=""text"" placeholder=""{0}""></input>", ValuePrompt);
            }
            html.Append(@"<a href=""#"" class=""btn btn-sm btn-danger key-value-remove""><i class=""fa fa-minus-circle""></i></a></div>");

            var hfValueHtml = new HtmlInputHidden();

            hfValueHtml.AddCssClass("js-value-html");
            hfValueHtml.Value = html.ToString();
            hfValueHtml.RenderControl(writer);

            writer.AddAttribute(HtmlTextWriterAttribute.Class, "key-value-rows");
            writer.RenderBeginTag(HtmlTextWriterTag.Span);
            writer.WriteLine();

            string[] nameValues = this.Value.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string nameValue in nameValues)
            {
                string[] nameAndValue = nameValue.Split(new char[] { '^' }, StringSplitOptions.RemoveEmptyEntries);

                writer.AddAttribute(HtmlTextWriterAttribute.Class, "controls controls-row form-control-group");
                writer.RenderBeginTag(HtmlTextWriterTag.Div);
                writer.WriteLine();

                // Write Key
                if (CustomKeys != null && CustomKeys.Any())
                {
                    DropDownList ddl = new DropDownList();
                    ddl.AddCssClass("key-value-key form-control input-width-md js-key-value-input");
                    ddl.DataTextField  = "Value";
                    ddl.DataValueField = "Key";
                    ddl.DataSource     = CustomKeys;
                    ddl.DataBind();
                    if (nameAndValue.Length >= 1)
                    {
                        ddl.SelectedValue = nameAndValue[0];
                    }
                    ddl.RenderControl(writer);
                }
                else
                {
                    // Write Name
                    writer.AddAttribute(HtmlTextWriterAttribute.Class, "key-value-key form-control input-width-md js-key-value-input");
                    writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
                    writer.AddAttribute(HtmlTextWriterAttribute.Value, nameAndValue.Length >= 1 ? nameAndValue[0] : string.Empty);
                    writer.AddAttribute("placeholder", KeyPrompt);
                    writer.RenderBeginTag(HtmlTextWriterTag.Input);
                    writer.RenderEndTag();
                }

                writer.Write(" ");
                writer.WriteLine();

                // Write Value
                if (values != null)
                {
                    DropDownList ddl = new DropDownList();
                    ddl.AddCssClass("key-value-value form-control input-width-md js-key-value-input");
                    ddl.DataTextField  = "Value";
                    ddl.DataValueField = "Key";
                    ddl.DataSource     = values;
                    ddl.DataBind();
                    if (nameAndValue.Length >= 2)
                    {
                        ddl.SelectedValue = nameAndValue[1];
                    }
                    ddl.RenderControl(writer);
                }
                else
                {
                    writer.AddAttribute(HtmlTextWriterAttribute.Class, "key-value-value form-control input-width-md js-key-value-input");
                    writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
                    writer.AddAttribute(HtmlTextWriterAttribute.Value, nameAndValue.Length >= 2 ? nameAndValue[1] : string.Empty);
                    writer.AddAttribute("placeholder", ValuePrompt);
                    writer.RenderBeginTag(HtmlTextWriterTag.Input);
                    writer.RenderEndTag();
                }

                writer.Write(" ");
                writer.WriteLine();

                // Write Remove Button
                writer.AddAttribute(HtmlTextWriterAttribute.Href, "#");
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "btn btn-sm btn-danger key-value-remove");
                writer.RenderBeginTag(HtmlTextWriterTag.A);
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "fa fa-minus-circle");
                writer.RenderBeginTag(HtmlTextWriterTag.I);
                writer.RenderEndTag();
                writer.RenderEndTag();
                writer.WriteLine();

                writer.RenderEndTag();
                writer.WriteLine();
            }

            writer.RenderEndTag();
            writer.WriteLine();


            writer.AddAttribute(HtmlTextWriterAttribute.Class, "actions");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);

            writer.AddAttribute(HtmlTextWriterAttribute.Class, "btn btn-action btn-xs key-value-add");
            writer.AddAttribute(HtmlTextWriterAttribute.Href, "#");
            writer.RenderBeginTag(HtmlTextWriterTag.A);
            writer.AddAttribute(HtmlTextWriterAttribute.Class, "fa fa-plus-circle");
            writer.RenderBeginTag(HtmlTextWriterTag.I);

            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.WriteLine();

            writer.RenderEndTag();
            writer.WriteLine();

            RegisterClientScript();
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Renders the entity fields controls.
        /// </summary>
        /// <param name="entityType">Type of the entity.</param>
        /// <param name="filterControl">The filter control.</param>
        /// <param name="writer">The writer.</param>
        /// <param name="entityFields">The entity fields.</param>
        /// <param name="ddlEntityField">The DDL entity field.</param>
        /// <param name="propertyControls">The property controls.</param>
        /// <param name="propertyControlsPrefix">The property controls prefix.</param>
        public void RenderEntityFieldsControls(Type entityType, FilterField filterControl, HtmlTextWriter writer, List <EntityField> entityFields,
                                               DropDownList ddlEntityField, List <Control> propertyControls, string propertyControlsPrefix)
        {
            string selectedEntityField = ddlEntityField.SelectedValue;

            writer.AddAttribute("class", "row js-filter-row");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);

            writer.AddAttribute("class", "col-md-3");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);
            ddlEntityField.AddCssClass("entity-property-selection");
            ddlEntityField.RenderControl(writer);
            writer.RenderEndTag();
            writer.AddAttribute("class", "col-md-9");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);

            // generate result for "none"
            StringBuilder sb         = new StringBuilder();
            string        lineFormat = @"
            case {0}: {1}; break;";

            int fieldIndex = 0;

            sb.AppendFormat(lineFormat, fieldIndex, "result = ''");
            fieldIndex++;

            // render empty row for "none"
            writer.AddAttribute("class", "row field-criteria");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);
            writer.RenderEndTag();  // row

            foreach (var entityField in entityFields)
            {
                string controlId = string.Format("{0}_{1}", propertyControlsPrefix, entityField.Name);
                var    control   = propertyControls.FirstOrDefault(c => c.ID == controlId);
                if (control != null)
                {
                    if (entityField.Name != selectedEntityField)
                    {
                        if (control is HtmlControl)
                        {
                            ((HtmlControl)control).Style["display"] = "none";
                        }
                        else if (control is WebControl)
                        {
                            ((WebControl)control).Style["display"] = "none";
                        }
                    }
                    control.RenderControl(writer);

                    string clientFormatSelection = entityField.FieldType.Field.GetFilterFormatScript(entityField.FieldConfig, entityField.Title);

                    if (clientFormatSelection != string.Empty)
                    {
                        sb.AppendFormat(lineFormat, fieldIndex, clientFormatSelection);
                    }

                    fieldIndex++;
                }
            }

            writer.RenderEndTag();  // col-md-9

            writer.RenderEndTag();  // row

            string scriptFormat = @"
    function {0}PropertySelection($content){{

        var sIndex = $('select.entity-property-selection', $content).find(':selected').index();
        var $selectedContent = $('div.field-criteria', $content).eq(sIndex);
        var result = '';
        switch(sIndex) {{
            {1}
        }}
        return result;
    }}
";

            string script = string.Format(scriptFormat, entityType.Name, sb.ToString());

            ScriptManager.RegisterStartupScript(filterControl, typeof(FilterField), entityType.Name + "-property-selection", script, true);

            script = @"
    $('select.entity-property-selection').change(function(){
        var $parentRow = $(this).closest('.js-filter-row');
        $parentRow.find('div.field-criteria').hide();
        $parentRow.find('div.field-criteria').eq($(this).find(':selected').index()).show();
    });";

            // only need this script once per page
            ScriptManager.RegisterStartupScript(filterControl.Page, filterControl.Page.GetType(), "entity-property-selection-change-script", script, true);

            RegisterFilterCompareChangeScript(filterControl);
        }