Esempio n. 1
0
        public static MvcHtmlString ControlGroupFor<TModel, TValue>(
            this HtmlHelper<TModel> html,
            Expression<Func<TModel, TValue>> expression,
            InputEditorType editorType = InputEditorType.TextBox,
            bool required = false,
            string helpHint = null)
        {
            if (editorType == InputEditorType.Hidden)
            {
                return html.HiddenFor(expression);
            }

            var sb = new StringBuilder("<div class='form-group'>");

            if (editorType != InputEditorType.Checkbox)
            {
                var className = "col-lg-4 control-label" + (required ? " required" : "");
                var fieldId = html.IdFor(expression).ToString();
                sb.AppendLine(html.LabelFor(expression, new { @class = className, @for = fieldId }).ToString());
            }

            sb.AppendLine("<div class='col-lg-8 controls'>");
            string inputHtml = "";
            object attrs = null;
            if (!required && (editorType == InputEditorType.TextBox || editorType == InputEditorType.Password))
            {
                attrs = new { placeholder = "Optional" /* TODO: Loc */ , @class = "form-control" };
            }
            else
            {
                attrs = new { @class = "form-control" };
            }
            //var x = ModelMetadata.FromLambdaExpression(expression, html.ViewData).DisplayName;
            switch (editorType)
            {
                case InputEditorType.Checkbox:
                    inputHtml = string.Format("<label class='checkbox'>{0} {1}</label>",
                        html.EditorFor(expression).ToString(),
                        ModelMetadata.FromLambdaExpression(expression, html.ViewData).DisplayName); // TBD: ist das OK so?
                    break;
                case InputEditorType.Password:
                    inputHtml = html.PasswordFor(expression, attrs).ToString();
                    break;
                default:
                    inputHtml = html.TextBoxFor(expression, attrs).ToString();
                    break;
            }
            sb.AppendLine(inputHtml);
            sb.AppendLine(html.ValidationMessageFor(expression).ToString());
            if (helpHint.HasValue())
            {
                sb.AppendLine(string.Format("<div class='help-block muted'>{0}</div>", helpHint));
            }
            sb.AppendLine("</div>"); // div.controls

            sb.AppendLine("</div>"); // div.control-group

            return MvcHtmlString.Create(sb.ToString());
        }
Esempio n. 2
0
        public static MvcHtmlString ControlGroupFor <TModel, TValue>(
            this HtmlHelper <TModel> html,
            Expression <Func <TModel, TValue> > expression,
            InputEditorType editorType = InputEditorType.TextBox,
            bool required     = false,
            string helpHint   = null,
            string breakpoint = "md")
        {
            if (editorType == InputEditorType.Hidden)
            {
                return(html.HiddenFor(expression));
            }

            string inputHtml      = "";
            var    htmlAttributes = new RouteValueDictionary();
            var    metadata       = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
            var    dataTypeName   = metadata.DataTypeName.EmptyNull();
            var    groupClass     = "form-group row";
            var    labelClass     = "col-{0}-3 col-form-label".FormatInvariant(breakpoint.NullEmpty() ?? "md");
            var    controlsClass  = "col-{0}-9".FormatInvariant(breakpoint.NullEmpty() ?? "md");
            var    sb             = new StringBuilder("<div class='{0}'>".FormatWith(groupClass));

            if (editorType != InputEditorType.Checkbox)
            {
                var className = labelClass + (required ? " required" : "");
                var fieldId   = html.IdFor(expression).ToString();
                sb.AppendLine(html.LabelFor(expression, new { @class = className, @for = fieldId }).ToString());
            }

            sb.AppendLine("<div class='{0}'>".FormatWith(controlsClass));

            if (!required && (editorType == InputEditorType.TextBox || editorType == InputEditorType.Password))
            {
                htmlAttributes.Add("placeholder", EngineContext.Current.Resolve <ILocalizationService>().GetResource("Common.Optional"));
            }

            switch (dataTypeName)
            {
            case "EmailAddress":
                htmlAttributes.Add("type", "email");
                break;

            case "PhoneNumber":
                htmlAttributes.Add("type", "tel");
                break;
            }

            htmlAttributes.Add("class", "form-control");

            switch (editorType)
            {
            case InputEditorType.Checkbox:
                CommonHelper.TryConvert <bool>(metadata.Model, out var isChecked);
                inputHtml = string.Format("<div class='form-check'>{0}<label class='form-check-label' for='{1}'>{2}</label></div>",
                                          html.CheckBox(ExpressionHelper.GetExpressionText(expression), isChecked, new { @class = "form-check-input" }).ToString(),
                                          html.IdFor(expression),
                                          metadata.DisplayName);
                break;

            case InputEditorType.Password:
                inputHtml = html.PasswordFor(expression, htmlAttributes).ToString();
                break;

            default:
                inputHtml = html.TextBoxFor(expression, htmlAttributes).ToString();
                break;
            }

            sb.AppendLine(inputHtml);
            sb.AppendLine(html.ValidationMessageFor(expression).ToString());
            if (helpHint.HasValue())
            {
                sb.AppendLine(string.Format("<div class='form-text text-muted'>{0}</div>", helpHint));
            }
            sb.AppendLine("</div>"); // div.controls

            sb.AppendLine("</div>"); // div.control-group

            return(MvcHtmlString.Create(sb.ToString()));
        }
        public static MvcHtmlString ControlGroupFor <TModel, TValue>(
            this HtmlHelper <TModel> html,
            Expression <Func <TModel, TValue> > expression,
            InputEditorType editorType = InputEditorType.TextBox,
            bool required   = false,
            string helpHint = null)
        {
            if (editorType == InputEditorType.Hidden)
            {
                return(html.HiddenFor(expression));
            }

            string inputHtml      = "";
            var    htmlAttributes = new RouteValueDictionary();
            var    dataTypeName   = ModelMetadata.FromLambdaExpression(expression, html.ViewData).DataTypeName.EmptyNull();

            var sb = new StringBuilder("<div class='control-group'>");

            if (editorType != InputEditorType.Checkbox)
            {
                var className = "control-label" + (required ? " required" : "");
                var fieldId   = html.IdFor(expression).ToString();
                sb.AppendLine(html.LabelFor(expression, new { @class = className, @for = fieldId }).ToString());
            }

            sb.AppendLine("<div class='controls'>");

            if (!required && (editorType == InputEditorType.TextBox || editorType == InputEditorType.Password))
            {
                htmlAttributes.Add("placeholder", EngineContext.Current.Resolve <ILocalizationService>().GetResource("Common.Optional"));
            }

            switch (dataTypeName)
            {
            case "EmailAddress":
                htmlAttributes.Add("type", "email");
                break;

            case "PhoneNumber":
                htmlAttributes.Add("type", "tel");
                break;
            }

            switch (editorType)
            {
            case InputEditorType.Checkbox:
                inputHtml = string.Format("<label class='checkbox'>{0} {1}</label>",
                                          html.EditorFor(expression).ToString(),
                                          ModelMetadata.FromLambdaExpression(expression, html.ViewData).DisplayName); // TBD: ist das OK so?
                break;

            case InputEditorType.Password:
                inputHtml = html.PasswordFor(expression, htmlAttributes).ToString();
                break;

            default:
                inputHtml = html.TextBoxFor(expression, htmlAttributes).ToString();
                break;
            }

            sb.AppendLine(inputHtml);
            sb.AppendLine(html.ValidationMessageFor(expression).ToString());
            if (helpHint.HasValue())
            {
                sb.AppendLine(string.Format("<div class='help-block muted'>{0}</div>", helpHint));
            }
            sb.AppendLine("</div>"); // div.controls

            sb.AppendLine("</div>"); // div.control-group

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