public static MvcHtmlString TextBoxCalendarFor <TModel, TValue>(this HtmlHelper <TModel> htmlHelper,
                                                                        Expression <Func <TModel, TValue> > expression, EnumTipoCalendarios tipocalendario = EnumTipoCalendarios.SoloFecha,
                                                                        RouteValueDictionary htmlAttributes = null)
        {
            var    sb         = new StringBuilder();
            string clase      = String.Empty;
            string formato    = String.Empty;
            var    result     = String.Empty;
            bool   sinValor   = false;
            var    styleClass = "form-control";


            if (htmlHelper.ViewData.Model != null)
            {
                Func <TModel, TValue> deleg = expression.Compile();
                result = deleg(htmlHelper.ViewData.Model).ToString();
            }
            else
            {
                result   = DateTime.Now.ToShortDateString();
                sinValor = true;
            }

            string   value = String.Empty;
            DateTime dateValue;

            if (result.ToString() != "")
            {
                CultureInfo culture = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.ToString());
                var         styles  = DateTimeStyles.None;

                try
                {
                    dateValue = DateTime.Parse(result);

                    if (DateTime.TryParse(result, culture, styles, out dateValue))
                    {
                        value = "Ok";
                    }
                    else
                    {
                        value = "Error";
                    }
                }
                catch (Exception ex)
                {
                    value = ex.Message;
                }



                if (DateTime.TryParse(result, culture, styles, out dateValue))
                {
                    switch (tipocalendario)
                    {
                    case EnumTipoCalendarios.SoloFecha:
                        clase   = "onlydatepicker";
                        formato = "dd/MM/yyyy";
                        break;

                    case EnumTipoCalendarios.FechayHora:
                        clase      = "datetimepicker";
                        formato    = "dd/MM/yyyy hh:mm:ss";
                        styleClass = "span2";
                        break;

                    case EnumTipoCalendarios.SoloHora:
                        clase   = "onlytimepicker";
                        formato = "hh:mm:ss";

                        break;
                    }

                    if (sinValor)
                    {
                        value = "";
                    }
                    else
                    {
                        value = dateValue.ToString(formato);
                    }
                }
            }

            if (htmlAttributes == null)
            {
                htmlAttributes = new RouteValueDictionary {
                    { "size", 16 }, { "data-format", formato }, { "Value", value }, { "class", styleClass }
                };
            }
            else
            {
                if (!htmlAttributes.ContainsKey("size"))
                {
                    htmlAttributes.Add("size", 16);
                }

                if (!htmlAttributes.ContainsKey("data-format"))
                {
                    htmlAttributes.Add("data-format", formato);
                }

                if (!htmlAttributes.ContainsKey("Value"))
                {
                    htmlAttributes.Add("Value", value);
                }

                if (!htmlAttributes.ContainsKey("class"))
                {
                    htmlAttributes.Add("class", styleClass);
                }
                else
                {
                    htmlAttributes["class"] = htmlAttributes["class"] + " ," + styleClass;
                }

                if (htmlAttributes.ContainsKey("data_bind"))
                {
                    htmlAttributes.Add("data-bind", htmlAttributes["data_bind"].ToString());
                    htmlAttributes.Remove("data_bind");
                }
            }

            sb.AppendLine(@"    <div id=""2"" class=""input-group date datepicker"">
                {0}
                <span class=""input-group-addon add-on""><span class=""glyphicon glyphicon-calendar""></span></span>
                </div>");


            MvcHtmlString html = htmlHelper.TextBoxFor(expression, htmlAttributes);

            return(new MvcHtmlString(String.Format(sb.ToString(), html)));
        }
        public static MvcHtmlString TextBoxCalendar(this HtmlHelper htmlHelper, string id, string valor, EnumTipoCalendarios tipocalendario = EnumTipoCalendarios.SoloFecha,
                                                    RouteValueDictionary htmlAttributes = null)
        {
            var sb = new StringBuilder();

            sb.AppendLine(@"    <div class=""input-group date datepicker"" id=""{0}"">
        {1}
        <span class=""input-group-addon add-on""><span class=""glyphicon glyphicon-calendar""></span></span>
        </div>");

            if (htmlAttributes == null)
            {
                htmlAttributes = new RouteValueDictionary {
                    { "size", 16 }, { "class", "form-control" }
                };
            }
            else
            {
                if (!htmlAttributes.ContainsKey("size"))
                {
                    htmlAttributes.Add("size", 16);
                }

                if (!htmlAttributes.ContainsKey("class"))
                {
                    htmlAttributes.Add("class", "form-control");
                }
                else
                {
                    htmlAttributes["class"] = htmlAttributes["class"] + " form-control";
                }
            }

            MvcHtmlString html = htmlHelper.TextBox(id, valor, htmlAttributes);

            return(new MvcHtmlString(String.Format(sb.ToString(), id, html)));
        }