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()); }
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())); }