public string ToHtmlString()
        {
            var mergedHtmlAttributes = _htmlAttributes;

            if (!string.IsNullOrEmpty(_id))
            {
                mergedHtmlAttributes.AddIfNotExist("id", _id);
            }
            if (_disabled)
            {
                mergedHtmlAttributes.AddOrMergeCssClass("class", "disabled");
            }

            var linkBuilder = new TagBuilder("a");

            linkBuilder.MergeAttributes(mergedHtmlAttributes);
            linkBuilder.MergeAttribute("href", _url);

            if (_iconPrepend != string.Empty || _iconAppend != string.Empty || !string.IsNullOrEmpty(_iconPrependCustomClass) || !string.IsNullOrEmpty(_iconAppendCustomClass))
            {
                var iPrependString = string.Empty;
                var iAppendString  = string.Empty;

                if (_iconPrepend != string.Empty)
                {
                    iPrependString = new BootstrapIcon(_iconPrepend, _iconPrependIsWhite).ToHtmlString() + " ";
                }
                if (_iconAppend != string.Empty)
                {
                    iAppendString = " " + new BootstrapIcon(_iconAppend, _iconAppendIsWhite).ToHtmlString();
                }
                if (!string.IsNullOrEmpty(_iconPrependCustomClass))
                {
                    var i = new TagBuilder("i");
                    i.AddCssClass(_iconPrependCustomClass);
                    iPrependString = i.ToString(TagRenderMode.Normal) + " ";
                }
                if (!string.IsNullOrEmpty(_iconAppendCustomClass))
                {
                    var i = new TagBuilder("i");
                    i.AddCssClass(_iconAppendCustomClass);
                    iAppendString = " " + i.ToString(TagRenderMode.Normal);
                }

                _linkText = iPrependString + _linkText + iAppendString;
            }

            linkBuilder.InnerHtml = _linkText;

            string input = linkBuilder.ToString(TagRenderMode.Normal);

            if (!string.IsNullOrEmpty(_wrapTag))
            {
                input = string.Format("<{0}>{1}</{0}>", _wrapTag, input);
            }

            return(MvcHtmlString.Create(input).ToString());
        }
        public virtual string ToHtmlString()
        {
            var input = new TagBuilder("button");

            input.Attributes.Add("type", _model.type);
            if (!string.IsNullOrEmpty(_model.name))
            {
                input.Attributes.Add("name", _model.name);
            }
            if (!string.IsNullOrEmpty(_model.id))
            {
                input.Attributes.Add("id", _model.id);
            }
            if (!string.IsNullOrEmpty(_model.value))
            {
                input.Attributes.Add("value", _model.value);
            }
            if (_model.tooltip != null)
            {
                _model.htmlAttributes.MergeHtmlAttributes(_model.tooltip.ToDictionary());
            }
            if (_model.popover != null)
            {
                _model.htmlAttributes.MergeHtmlAttributes(_model.popover.ToDictionary());
            }
            input.MergeAttributes(_model.htmlAttributes.FormatHtmlAttributes());
            input.AddCssClass(BootstrapHelper.GetClassForButtonSize(_model.size));
            input.AddCssClass(BootstrapHelper.GetClassForButtonColor(_model.color));
            if (_model.buttonBlock)
            {
                input.AddCssClass("btn-block");
            }
            if (_model.isShiny)
            {
                input.AddCssClass("shiny");
            }
            if (_model.circular)
            {
                input.AddCssClass("btn-circle");
            }
            if (_model.iconOnly)
            {
                input.AddCssClass("icon-only");
            }
            if (_model.labeled)
            {
                input.AddCssClass("btn-labeled");
            }
            if (_model.isDropDownToggle)
            {
                input.AddCssClass("dropdown-toggle");
                input.AddOrMergeAttribute("data-toggle", "dropdown");
            }
            if (_model.disabled)
            {
                input.AddCssClass("disabled");
                input.AddOrMergeAttribute("disabled", "");
            }

            if (!string.IsNullOrEmpty(_model.loadingText))
            {
                input.AddOrMergeAttribute("data-loading-text", _model.loadingText);
            }
            input.AddCssClass("btn");

            if (_withCaret)
            {
                if (!string.IsNullOrEmpty(_model.text))
                {
                    _model.text += " ";
                }
                _model.text += "<span class='caret'></span>";
            }

            if (_model.iconPrepend != String.Empty || _model.iconAppend != String.Empty || !string.IsNullOrEmpty(_model.iconPrependCustomClass) || !string.IsNullOrEmpty(_model.iconAppendCustomClass))
            {
                var iPrependString  = string.Empty;
                var iAppendString   = string.Empty;
                var iconLabelString = "";
                if (_model.labeled)
                {
                    iconLabelString = " btn-label";
                }
                if (_model.iconPrepend != String.Empty)
                {
                    iPrependString = new BootstrapIcon(_model.iconPrepend + iconLabelString, _model.iconPrependIsWhite).ToHtmlString();
                }
                if (_model.iconAppend != String.Empty)
                {
                    iAppendString = new BootstrapIcon(_model.iconAppend + " right" + iconLabelString, _model.iconAppendIsWhite).ToHtmlString();
                }
                if (!string.IsNullOrEmpty(_model.iconPrependCustomClass))
                {
                    var i = new TagBuilder("i");
                    i.AddCssClass(_model.iconPrependCustomClass);
                    iPrependString = i.ToString(TagRenderMode.Normal);
                }
                if (!string.IsNullOrEmpty(_model.iconAppendCustomClass))
                {
                    var i = new TagBuilder("i");
                    i.AddCssClass(_model.iconAppendCustomClass);
                    iAppendString = i.ToString(TagRenderMode.Normal);
                }

                _model.text =
                    iPrependString +
                    (!string.IsNullOrEmpty(iPrependString) && (!string.IsNullOrEmpty(_model.text) || !string.IsNullOrEmpty(iAppendString)) ? " " : "") +
                    _model.text +
                    (!string.IsNullOrEmpty(iAppendString) && (!string.IsNullOrEmpty(_model.text) || !string.IsNullOrEmpty(iPrependString)) ? " " : "") +
                    iAppendString;
            }

            input.InnerHtml = _model.text;
            return(input.ToString());
        }
        public override string ToHtmlString()
        {
            var mergedHtmlAttributes = _model.htmlAttributes;

            mergedHtmlAttributes.AddOrMergeCssClass("class", "btn");
            if (!string.IsNullOrEmpty(_model.id))
            {
                mergedHtmlAttributes.AddIfNotExist("id", _model.id);
            }

            mergedHtmlAttributes.AddOrMergeCssClass("class", BootstrapHelper.GetClassForButtonSize(_model.size));
            mergedHtmlAttributes.AddOrMergeCssClass("class", BootstrapHelper.GetClassForButtonColor(_model.color));

            if (_model.buttonBlock)
            {
                mergedHtmlAttributes.AddOrMergeCssClass("class", "btn-block");
            }
            if (_model.isDropDownToggle)
            {
                mergedHtmlAttributes.AddOrMergeCssClass("class", "dropdown-toggle");
                mergedHtmlAttributes.AddIfNotExist("data-toggle", "dropdown");
            }
            if (_model.disabled)
            {
                mergedHtmlAttributes.AddOrMergeCssClass("class", "disabled");
            }
            if (!string.IsNullOrEmpty(_model.loadingText))
            {
                mergedHtmlAttributes.AddOrReplace("data-loading-text", _model.loadingText);
            }
            if (!string.IsNullOrWhiteSpace(_title))
            {
                mergedHtmlAttributes.Add("title", _title);
            }

            var input = string.Empty;

            if (_model.iconPrepend != string.Empty || _model.iconAppend != string.Empty || !string.IsNullOrEmpty(_model.iconPrependCustomClass) || !string.IsNullOrEmpty(_model.iconAppendCustomClass))
            {
                var iPrependString = string.Empty;
                var iAppendString  = string.Empty;

                if (_model.iconPrepend != string.Empty)
                {
                    iPrependString = new BootstrapIcon(_model.iconPrepend, _model.iconPrependIsWhite).ToHtmlString();
                }
                if (_model.iconAppend != string.Empty)
                {
                    iAppendString = new BootstrapIcon(_model.iconAppend, _model.iconAppendIsWhite).ToHtmlString();
                }
                if (!string.IsNullOrEmpty(_model.iconPrependCustomClass))
                {
                    var i = new TagBuilder("i");
                    i.AddCssClass(_model.iconPrependCustomClass);
                    iPrependString = i.ToString(TagRenderMode.Normal);
                }
                if (!string.IsNullOrEmpty(_model.iconAppendCustomClass))
                {
                    var i = new TagBuilder("i");
                    i.AddCssClass(_model.iconAppendCustomClass);
                    iAppendString = i.ToString(TagRenderMode.Normal);
                }

                var combined =
                    iPrependString +
                    (!string.IsNullOrEmpty(iPrependString) && (!string.IsNullOrEmpty(_model.text) || !string.IsNullOrEmpty(iAppendString)) ? " " : "") +
                    _model.text +
                    (!string.IsNullOrEmpty(iAppendString) && (!string.IsNullOrEmpty(_model.text) || !string.IsNullOrEmpty(iPrependString)) ? " " : "") +
                    iAppendString;

                var holder = Guid.NewGuid().ToString();

                input = GenerateActionLink(holder, mergedHtmlAttributes);
                input = input.Replace(holder, combined);
            }
            else
            {
                input = GenerateActionLink(_model.text, mergedHtmlAttributes);
            }

            return(MvcHtmlString.Create(input).ToString());
        }
        public string ToHtmlString()
        {
            var mergedHtmlAttributes = _htmlAttributes;

            if (!string.IsNullOrEmpty(_id))
            {
                mergedHtmlAttributes.AddIfNotExist("id", _id);
            }

            if (_isDropDownToggle)
            {
                mergedHtmlAttributes.AddOrMergeCssClass("class", "dropdown-toggle");
                mergedHtmlAttributes.AddIfNotExist("data-toggle", "dropdown");
            }
            if (_disabled)
            {
                mergedHtmlAttributes.AddOrMergeCssClass("class", "disabled");
            }
            if (!string.IsNullOrEmpty(_title))
            {
                mergedHtmlAttributes.AddOrReplace("title", _title);
            }

            var input          = string.Empty;
            var iPrependString = string.Empty;
            var iAppendString  = string.Empty;

            if (_iconPrepend != string.Empty || _iconAppend != string.Empty || !string.IsNullOrEmpty(_iconPrependCustomClass) || !string.IsNullOrEmpty(_iconAppendCustomClass))
            {
                if (_iconPrepend != string.Empty)
                {
                    iPrependString = new BootstrapIcon(_iconPrepend, _iconPrependIsWhite).ToHtmlString() + " ";
                }
                if (_iconAppend != string.Empty)
                {
                    iAppendString = " " + new BootstrapIcon(_iconAppend, _iconAppendIsWhite).ToHtmlString();
                }
                if (!string.IsNullOrEmpty(_iconPrependCustomClass))
                {
                    var i = new TagBuilder("i");
                    i.AddCssClass(_iconPrependCustomClass);
                    iPrependString = i.ToString(TagRenderMode.Normal) + " ";
                }
                if (!string.IsNullOrEmpty(_iconAppendCustomClass))
                {
                    var i = new TagBuilder("i");
                    i.AddCssClass(_iconAppendCustomClass);
                    iAppendString = " " + i.ToString(TagRenderMode.Normal);
                }
                _linkText = "{0}" + _linkText + "{1}";
            }

            var requestedController = "";
            var requestedAction     = "";
            var requestedArea       = "";

            switch (_actionTypePassed)
            {
            case ActionTypePassed.HtmlRegular:
                requestedArea       = _routeValues != null && _routeValues.ContainsKey("area") ? _routeValues["area"].ToString() : html.ViewContext.RouteData.DataTokens.ContainsKey("area") ? html.ViewContext.RouteData.DataTokens["area"].ToString() : string.Empty;
                requestedController = string.IsNullOrEmpty(_controllerName) ? html.ViewContext.RouteData.GetRequiredString("controller") : _controllerName;
                requestedAction     = _actionName;
                input = html.ActionLink(_linkText, _actionName, _controllerName, _protocol, _hostName, _fragment, _routeValues, mergedHtmlAttributes).ToHtmlString();
                break;

            case ActionTypePassed.HtmlActionResult:
                requestedArea       = _result.GetRouteValueDictionary().ContainsKey("area") ? _result.GetRouteValueDictionary()["area"].ToString() : string.Empty;
                requestedController = _result.GetRouteValueDictionary()["controller"].ToString();
                requestedAction     = _result.GetRouteValueDictionary()["action"].ToString();
                input = html.ActionLink(_linkText, _result, mergedHtmlAttributes, _protocol, _hostName, _fragment).ToHtmlString();
                break;

            case ActionTypePassed.HtmlTaskResult:
                requestedArea       = _taskResult.Result.GetRouteValueDictionary().ContainsKey("area") ? _taskResult.Result.GetRouteValueDictionary()["area"].ToString() : string.Empty;
                requestedController = _taskResult.Result.GetRouteValueDictionary()["controller"].ToString();
                requestedAction     = _taskResult.Result.GetRouteValueDictionary()["action"].ToString();
                input = html.ActionLink(_linkText, _taskResult, mergedHtmlAttributes, _protocol, _hostName, _fragment).ToHtmlString();
                break;

            case ActionTypePassed.AjaxRegular:
                requestedArea       = _routeValues != null && _routeValues.ContainsKey("area") ? _routeValues["area"].ToString() : ajax.ViewContext.RouteData.DataTokens.ContainsKey("area") ? ajax.ViewContext.RouteData.DataTokens["area"].ToString() : string.Empty;
                requestedController = string.IsNullOrEmpty(_controllerName) ? ajax.ViewContext.RouteData.GetRequiredString("controller") : _controllerName;
                requestedAction     = _actionName;
                input = ajax.ActionLink(_linkText, _actionName, _controllerName, _protocol, _hostName, _fragment, _routeValues, _ajaxOptions, mergedHtmlAttributes).ToHtmlString();
                break;

            case ActionTypePassed.AjaxActionResult:
                requestedArea       = _result.GetRouteValueDictionary().ContainsKey("area") ? _result.GetRouteValueDictionary()["area"].ToString() : string.Empty;
                requestedController = _result.GetRouteValueDictionary()["controller"].ToString();
                requestedAction     = _result.GetRouteValueDictionary()["action"].ToString();
                input = ajax.ActionLink(_linkText, _result, _ajaxOptions, mergedHtmlAttributes).ToHtmlString();
                break;

            case ActionTypePassed.AjaxTaskResult:
                requestedArea       = _taskResult.Result.GetRouteValueDictionary().ContainsKey("area") ? _taskResult.Result.GetRouteValueDictionary()["area"].ToString() : string.Empty;
                requestedController = _taskResult.Result.GetRouteValueDictionary()["controller"].ToString();
                requestedAction     = _taskResult.Result.GetRouteValueDictionary()["action"].ToString();
                input = ajax.ActionLink(_linkText, _taskResult, _ajaxOptions, mergedHtmlAttributes).ToHtmlString();
                break;
            }

            input = string.Format(input, iPrependString, iAppendString);

            if (!string.IsNullOrEmpty(_wrapTag))
            {
                var currentAction     = string.Empty;
                var currentController = string.Empty;
                var currentArea       = string.Empty;
                switch (_actionTypePassed)
                {
                case ActionTypePassed.HtmlRegular:
                case ActionTypePassed.HtmlActionResult:
                case ActionTypePassed.HtmlTaskResult:
                    currentAction     = html.ViewContext.RouteData.GetRequiredString("action");
                    currentController = html.ViewContext.RouteData.GetRequiredString("controller");
                    currentArea       = html.ViewContext.RouteData.DataTokens.ContainsKey("area") ? html.ViewContext.RouteData.DataTokens["area"].ToString() : string.Empty;
                    break;

                case ActionTypePassed.AjaxRegular:
                case ActionTypePassed.AjaxActionResult:
                case ActionTypePassed.AjaxTaskResult:
                    currentAction     = ajax.ViewContext.RouteData.GetRequiredString("action");
                    currentController = ajax.ViewContext.RouteData.GetRequiredString("controller");
                    currentArea       = ajax.ViewContext.RouteData.DataTokens.ContainsKey("area") ? ajax.ViewContext.RouteData.DataTokens["area"].ToString() : string.Empty;
                    break;
                }

                var classActive = "";
                if (_wrapTagControllerAware && currentArea == requestedArea && currentController == requestedController)
                {
                    classActive = @" class=""active""";
                }
                if (_wrapTagControllerAndActionAware && currentArea == requestedArea && currentController == requestedController && currentAction == requestedAction)
                {
                    classActive = @" class=""active""";
                }
                input = string.Format("<{0}{1}>{2}</{0}>", _wrapTag, classActive, input);
            }

            return(MvcHtmlString.Create(input).ToString());
        }