/// <inheritdoc /> public override void PrepareFieldConfiguration(IFieldConfiguration fieldConfiguration) { if (!string.IsNullOrEmpty(FieldGenerator.Metadata.DisplayFormatString)) { fieldConfiguration.Attr("data-val-format", FieldGenerator.Metadata.DisplayFormatString.Replace("{0:", "").Replace("}", "")); } }
/// <summary> /// Applys the autofocus attribute to a given field /// </summary> /// <param name="config">Field configuration to modify</param> /// <returns>The instance of IFieldConfiguration passed in to continue chaining things</returns> public static IFieldConfiguration AutoFocus(this IFieldConfiguration config) { if (config != null) { return(config.Attr("autofocus", "autofocus")); } return(null); }
/// <summary> /// Sets the tab index of a given field /// </summary> /// <param name="config">Field configuration to update</param> /// <param name="index">Tab index to be set</param> /// <returns>The instance of IFieldConfiguration passed in to continue chaining things</returns> public static IFieldConfiguration TabIndex(this IFieldConfiguration config, int index) { if (config != null) { return(config.Attr("tabindex", index)); } return(null); }
public override void PrepareFieldConfiguration(IFieldConfiguration fieldConfiguration) { // There is a bug in the unobtrusive validation for numeric fields that are a radio button // when there is a radio button for "no value selected" i.e. value="" then it can't be selected // as an option since it tries to validate the empty string as a number. // This turns off unobtrusive validation in that circumstance if (fieldConfiguration.DisplayType == FieldDisplayType.List && !FieldGenerator.Metadata.IsRequired && IsNumeric() && !HasMultipleValues()) { fieldConfiguration.Attr("data-val", "false"); } }
/// <inheritdoc /> public override void PrepareFieldConfiguration(IFieldConfiguration fieldConfiguration) { var dateTimeFormat = "MM-dd-yyyy"; if (!string.IsNullOrEmpty(FieldGenerator.Metadata.DisplayFormatString)) { dateTimeFormat = FieldGenerator.Metadata.DisplayFormatString.Replace("{0:", "").Replace("}", ""); } fieldConfiguration.Attr("data-val-format", dateTimeFormat); fieldConfiguration.AddClass("datepicker"); }
/// <inheritdoc /> public override void PrepareFieldConfiguration(IFieldConfiguration fieldConfiguration) { if (!string.IsNullOrEmpty(FieldGenerator.Metadata.DisplayFormatString)) { var format = FieldGenerator.Metadata.DisplayFormatString.Replace("{0:", "").Replace("}", ""); if (format == "g") { format = string.Join(" ", CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern, CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern); } fieldConfiguration.Attr("data-val-format", format); } }
/// <inheritdoc /> public IReadonlyFieldConfiguration PrepareFieldConfiguration(IFieldConfiguration fieldConfiguration, FieldParent fieldParent) { fieldConfiguration = fieldConfiguration ?? new FieldConfiguration(); if (!string.IsNullOrEmpty(Metadata.EditFormatString) && string.IsNullOrEmpty(fieldConfiguration.FormatString)) { fieldConfiguration.WithFormatString(Metadata.EditFormatString); } if (!string.IsNullOrEmpty(Metadata.NullDisplayText) && string.IsNullOrEmpty(fieldConfiguration.NoneString)) { fieldConfiguration.WithNoneAs(Metadata.NullDisplayText); } if (Metadata.IsReadOnly) { fieldConfiguration.Readonly(); } if (fieldConfiguration.Hint != null) { var hintId = $"{HtmlHelper.GetFullHtmlFieldName(FieldProperty)}--Hint"; fieldConfiguration.Attr("aria-describedby", hintId).WithHintId(hintId); } var handler = FieldGeneratorHandlersRouter <TModel, T> .GetHandler(this); handler.PrepareFieldConfiguration(fieldConfiguration); Template.PrepareFieldConfiguration(this, handler, fieldConfiguration, fieldParent); // Do this after the handler above since it may change FieldDisplayType var disabledOrReadonly = fieldConfiguration.Attributes.Has("readonly") || fieldConfiguration.Attributes.Has("disabled"); var isCheckboxList = fieldConfiguration.DisplayType == FieldDisplayType.List && this.HasMultipleValues(); var userAlreadySpecifiedRequired = fieldConfiguration.Attributes.Has("required"); if (Metadata.IsRequired && !disabledOrReadonly && !userAlreadySpecifiedRequired && !isCheckboxList) { fieldConfiguration.Required(); } return(fieldConfiguration); }
/// <inheritdoc /> public override void PrepareFieldConfiguration(IFieldConfiguration fieldConfiguration) { if (!fieldConfiguration.Attributes.Has("step")) { if (FieldGenerator.IsIntegralNumber()) { fieldConfiguration.Attr("step", 1); } else if (FieldGenerator.Metadata.DataTypeName == DataType.Currency.ToString()) { fieldConfiguration.Attr("step", 0.01); } else { fieldConfiguration.Attr("step", "any"); } } if (!fieldConfiguration.Attributes.Has("min") || !fieldConfiguration.Attributes.Has("max")) { object min = null; object max = null; if (FieldGenerator.GetCustomAttributes().OfType <RangeAttribute>().Any()) { var converter = TypeDescriptor.GetConverter(FieldGenerator.GetUnderlyingType()); var range = FieldGenerator.GetCustomAttributes().OfType <RangeAttribute>().First(); min = range.Minimum; max = range.Maximum; } else { var type = FieldGenerator.GetUnderlyingType(); // https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types if (type == typeof(byte)) { min = 0; max = 255; } if (type == typeof(sbyte)) { min = -128; max = 127; } if (type == typeof(short)) { min = -32768; max = 32767; } if (type == typeof(ushort)) { min = 0; max = 65535; } if (type == typeof(uint)) { min = 0; } if (type == typeof(ulong)) { min = 0; } } if (!fieldConfiguration.Attributes.Has("min") && min != null) { fieldConfiguration.Min(min.ToString()); } if (!fieldConfiguration.Attributes.Has("max") && max != null) { fieldConfiguration.Max(max.ToString()); } } }