| File: ModelBinding\Metadata\DisplayMetadata.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.Core\src\Microsoft.AspNetCore.Mvc.Core.csproj (Microsoft.AspNetCore.Mvc.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable enable namespace Microsoft.AspNetCore.Mvc.ModelBinding.Metadata; /// <summary> /// Display metadata details for a <see cref="ModelMetadata"/>. /// </summary> public class DisplayMetadata { private Func<string?> _displayFormatStringProvider = () => null; private Func<string?> _editFormatStringProvider = () => null; private Func<string?> _nullDisplayTextProvider = () => null; /// <summary> /// Gets a set of additional values. See <see cref="ModelMetadata.AdditionalValues"/> /// </summary> public IDictionary<object, object> AdditionalValues { get; } = new Dictionary<object, object>(); /// <summary> /// Gets or sets a value indicating whether or not to convert an empty string value or one containing only /// whitespace characters to <see langword="null"/> when representing a model as text. See /// <see cref="ModelMetadata.ConvertEmptyStringToNull"/> /// </summary> public bool ConvertEmptyStringToNull { get; set; } = true; /// <summary> /// Gets or sets the name of the data type. /// See <see cref="ModelMetadata.DataTypeName"/> /// </summary> public string? DataTypeName { get; set; } /// <summary> /// Gets or sets a delegate which is used to get a value for the /// model description. See <see cref="ModelMetadata.Description"/>. /// </summary> public Func<string?>? Description { get; set; } /// <summary> /// Gets or sets a display format string for the model. /// See <see cref="ModelMetadata.DisplayFormatString"/> /// </summary> /// <remarks> /// Setting <see cref="DisplayFormatString"/> also changes <see cref="DisplayFormatStringProvider"/>. /// </remarks> public string? DisplayFormatString { get { return DisplayFormatStringProvider(); } set { DisplayFormatStringProvider = () => value; } } /// <summary> /// Gets or sets a delegate which is used to get the display format string for the model. See /// <see cref="ModelMetadata.DisplayFormatString"/>. /// </summary> /// <remarks> /// Setting <see cref="DisplayFormatStringProvider"/> also changes <see cref="DisplayFormatString"/>. /// </remarks> public Func<string?> DisplayFormatStringProvider { get { return _displayFormatStringProvider; } set { ArgumentNullException.ThrowIfNull(value); _displayFormatStringProvider = value; } } /// <summary> /// Gets or sets a delegate which is used to get a value for the /// display name of the model. See <see cref="ModelMetadata.DisplayName"/>. /// </summary> public Func<string?>? DisplayName { get; set; } /// <summary> /// Gets or sets an edit format string for the model. /// See <see cref="ModelMetadata.EditFormatString"/> /// </summary> /// <remarks> /// <para> /// Setting <see cref="EditFormatString"/> also changes <see cref="EditFormatStringProvider"/>. /// </para> /// <para> /// <see cref="IDisplayMetadataProvider"/> instances that set this property to a non-<see langword="null"/>, /// non-empty, non-default value should also set <see cref="HasNonDefaultEditFormat"/> to /// <see langword="true"/>. /// </para> /// </remarks> public string? EditFormatString { get { return EditFormatStringProvider(); } set { EditFormatStringProvider = () => value; } } /// <summary> /// Gets or sets a delegate which is used to get the edit format string for the model. See /// <see cref="ModelMetadata.EditFormatString"/>. /// </summary> /// <remarks> /// <para> /// Setting <see cref="EditFormatStringProvider"/> also changes <see cref="EditFormatString"/>. /// </para> /// <para> /// <see cref="IDisplayMetadataProvider"/> instances that set this property to a non-default value should /// also set <see cref="HasNonDefaultEditFormat"/> to <see langword="true"/>. /// </para> /// </remarks> public Func<string?> EditFormatStringProvider { get { return _editFormatStringProvider; } set { ArgumentNullException.ThrowIfNull(value); _editFormatStringProvider = value; } } /// <summary> /// Gets the ordered and grouped display names and values of all <see cref="System.Enum"/> values in /// <see cref="ModelMetadata.UnderlyingOrModelType"/>. See /// <see cref="ModelMetadata.EnumGroupedDisplayNamesAndValues"/>. /// </summary> public IEnumerable<KeyValuePair<EnumGroupAndName, string>>? EnumGroupedDisplayNamesAndValues { get; set; } /// <summary> /// Gets the names and values of all <see cref="System.Enum"/> values in /// <see cref="ModelMetadata.UnderlyingOrModelType"/>. See <see cref="ModelMetadata.EnumNamesAndValues"/>. /// </summary> // This could be implemented in DefaultModelMetadata. But value should be cached. public IReadOnlyDictionary<string, string>? EnumNamesAndValues { get; set; } /// <summary> /// Gets or sets a value indicating whether or not the model has a non-default edit format. /// See <see cref="ModelMetadata.HasNonDefaultEditFormat"/> /// </summary> public bool HasNonDefaultEditFormat { get; set; } /// <summary> /// Gets or sets a value indicating if the surrounding HTML should be hidden. /// See <see cref="ModelMetadata.HideSurroundingHtml"/> /// </summary> public bool HideSurroundingHtml { get; set; } /// <summary> /// Gets or sets a value indicating if the model value should be HTML encoded. /// See <see cref="ModelMetadata.HtmlEncode"/> /// </summary> public bool HtmlEncode { get; set; } = true; /// <summary> /// Gets a value indicating whether <see cref="ModelMetadata.UnderlyingOrModelType"/> is for an /// <see cref="System.Enum"/>. See <see cref="ModelMetadata.IsEnum"/>. /// </summary> // This could be implemented in DefaultModelMetadata. But value is needed in the details provider. public bool IsEnum { get; set; } /// <summary> /// Gets a value indicating whether <see cref="ModelMetadata.UnderlyingOrModelType"/> is for an /// <see cref="System.Enum"/> with an associated <see cref="System.FlagsAttribute"/>. See /// <see cref="ModelMetadata.IsFlagsEnum"/>. /// </summary> // This could be implemented in DefaultModelMetadata. But value is needed in the details provider. public bool IsFlagsEnum { get; set; } /// <summary> /// Gets or sets the text to display when the model value is <see langword="null"/>. /// See <see cref="ModelMetadata.NullDisplayText"/> /// </summary> /// <remarks> /// Setting <see cref="NullDisplayText"/> also changes <see cref="NullDisplayTextProvider"/>. /// </remarks> public string? NullDisplayText { get { return NullDisplayTextProvider(); } set { NullDisplayTextProvider = () => value; } } /// <summary> /// Gets or sets a delegate which is used to get the text to display when the model is <see langword="null"/>. /// See <see cref="ModelMetadata.NullDisplayText"/>. /// </summary> /// <remarks> /// Setting <see cref="NullDisplayTextProvider"/> also changes <see cref="NullDisplayText"/>. /// </remarks> public Func<string?> NullDisplayTextProvider { get { return _nullDisplayTextProvider; } set { ArgumentNullException.ThrowIfNull(value); _nullDisplayTextProvider = value; } } /// <summary> /// Gets or sets the order. /// See <see cref="ModelMetadata.Order"/> /// </summary> public int Order { get; set; } = 10000; /// <summary> /// Gets or sets a delegate which is used to get a value for the /// model's placeholder text. See <see cref="ModelMetadata.Placeholder"/>. /// </summary> public Func<string?>? Placeholder { get; set; } /// <summary> /// Gets or sets a value indicating whether or not to include in the model value in display. /// See <see cref="ModelMetadata.ShowForDisplay"/> /// </summary> public bool ShowForDisplay { get; set; } = true; /// <summary> /// Gets or sets a value indicating whether or not to include in the model value in an editor. /// See <see cref="ModelMetadata.ShowForEdit"/> /// </summary> public bool ShowForEdit { get; set; } = true; /// <summary> /// Gets or sets a the property name of a model property to use for display. /// See <see cref="ModelMetadata.SimpleDisplayProperty"/> /// </summary> public string? SimpleDisplayProperty { get; set; } /// <summary> /// Gets or sets a hint for location of a display or editor template. /// See <see cref="ModelMetadata.TemplateHint"/> /// </summary> public string? TemplateHint { get; set; } }