/// <summary>
        /// Renders the value as a two value HTML input
        /// </summary>
        /// <param name="htmlHelper">The HTML helper.</param>
        /// <param name="value">The value</param>
        protected virtual IHtmlContent RenderBoolean(IHtmlHelper htmlHelper, bool value)
        {
            Guard.NotNull(htmlHelper, nameof(htmlHelper));

            return(htmlHelper.CheckBox(
                       expression: null,
                       isChecked: value,
                       htmlAttributes: HtmlAttributesUtilities.MergeHtmlAttributes(CheckBoxAttributes, htmlHelper)));
        }
        /// <summary>
        /// Renders the value as a three value HTML input.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper.</param>
        /// <param name="value">The value.</param>
        protected virtual IHtmlContent RenderTriState(IHtmlHelper htmlHelper, bool?value)
        {
            Guard.NotNull(htmlHelper, nameof(htmlHelper));

            return(htmlHelper.DropDownList(
                       expression: null,
                       selectList: TriStateValues(value),
                       optionLabel: null,
                       htmlAttributes: HtmlAttributesUtilities.MergeHtmlAttributes(DropDownAttributes, htmlHelper)));
        }
        /// <summary>
        /// Renders a <c>&lt;textarea&gt;</c> using the given <paramref name="htmlHelper" />.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper.</param>
        /// <param name="templateService">The template service.</param>
        protected override IHtmlContent Render(IHtmlHelper htmlHelper, ITemplateService templateService)
        {
            Guard.NotNull(htmlHelper, nameof(htmlHelper));

            return(htmlHelper.TextArea(
                       expression: string.Empty,
                       value: htmlHelper.ViewData.TemplateInfo.FormattedModelValue.ToString(),
                       rows: Rows,
                       columns: Columns,
                       htmlAttributes: HtmlAttributesUtilities.MergeHtmlAttributes(HtmlAttributes, htmlHelper)));
        }
        /// <summary>
        /// Renders an &lt;input&gt; element using the given <paramref name="htmlHelper" />.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper.</param>
        /// <param name="templateService">The template service.</param>
        protected override IHtmlContent Render(IHtmlHelper htmlHelper, ITemplateService templateService)
        {
            Guard.NotNull(htmlHelper, nameof(htmlHelper));

            var htmlAttributes = HtmlAttributesUtilities.MergeHtmlAttributes(HtmlAttributes, htmlHelper);

            return(htmlHelper.TextBox(
                       expression: null,
                       value: GetFormattedValue(htmlHelper),
                       format: null,
                       htmlAttributes: htmlAttributes));
        }