예제 #1
0
        /// <summary>
        /// Returns a select list for the given <paramref name="metadata"/>.
        /// </summary>
        /// <param name="metadata"><see cref="ModelMetadata"/> to generate a select list for.</param>
        /// <returns>
        /// An <see cref="IEnumerable{SelectListItem}"/> containing the select list for the given
        /// <paramref name="metadata"/>.
        /// </returns>
        /// <exception cref="ArgumentException">
        /// Thrown if <paramref name="metadata"/>'s <see cref="ModelMetadata.ModelType"/> is not an <see cref="Enum"/>
        /// or if it has a <see cref="FlagsAttribute"/>.
        /// </exception>
        protected virtual IEnumerable <SelectListItem> GetEnumSelectList(ModelMetadata metadata)
        {
            if (metadata == null)
            {
                throw new ArgumentNullException(nameof(metadata));
            }

            if (!metadata.IsEnum || metadata.IsFlagsEnum)
            {
                var message = Resources.FormatHtmlHelper_TypeNotSupported_ForGetEnumSelectList(
                    metadata.ModelType.FullName,
                    nameof(Enum).ToLowerInvariant(),
                    nameof(FlagsAttribute));
                throw new ArgumentException(message, nameof(metadata));
            }

            var selectList = new List <SelectListItem>();

            foreach (var keyValuePair in metadata.EnumDisplayNamesAndValues)
            {
                var selectListItem = new SelectListItem
                {
                    Text  = keyValuePair.Key,
                    Value = keyValuePair.Value,
                };

                selectList.Add(selectListItem);
            }

            return(selectList);
        }
예제 #2
0
        /// <inheritdoc />
        public IEnumerable <SelectListItem> GetEnumSelectList <TEnum>() where TEnum : struct
        {
            var type     = typeof(TEnum);
            var metadata = MetadataProvider.GetMetadataForType(type);

            if (!metadata.IsEnum || metadata.IsFlagsEnum)
            {
                var message = Resources.FormatHtmlHelper_TypeNotSupported_ForGetEnumSelectList(
                    type.FullName,
                    nameof(Enum).ToLowerInvariant(),
                    nameof(FlagsAttribute));
                throw new ArgumentException(message, nameof(TEnum));
            }

            return(GetEnumSelectList(metadata));
        }
예제 #3
0
        /// <summary>
        /// Returns a select list for the given <paramref name="metadata"/>.
        /// </summary>
        /// <param name="metadata"><see cref="ModelMetadata"/> to generate a select list for.</param>
        /// <returns>
        /// An <see cref="IEnumerable{SelectListItem}"/> containing the select list for the given
        /// <paramref name="metadata"/>.
        /// </returns>
        /// <exception cref="ArgumentException">
        /// Thrown if <paramref name="metadata"/>'s <see cref="ModelMetadata.ModelType"/> is not an <see cref="Enum"/>
        /// or if it has a <see cref="FlagsAttribute"/>.
        /// </exception>
        protected virtual IEnumerable <SelectListItem> GetEnumSelectList(ModelMetadata metadata)
        {
            if (metadata == null)
            {
                throw new ArgumentNullException(nameof(metadata));
            }

            if (!metadata.IsEnum || metadata.IsFlagsEnum)
            {
                var message = Resources.FormatHtmlHelper_TypeNotSupported_ForGetEnumSelectList(
                    metadata.ModelType.FullName,
                    nameof(Enum).ToLowerInvariant(),
                    nameof(FlagsAttribute));
                throw new ArgumentException(message, nameof(metadata));
            }

            var selectList = new List <SelectListItem>();
            var groupList  = new Dictionary <string, SelectListGroup>();

            foreach (var keyValuePair in metadata.EnumGroupedDisplayNamesAndValues)
            {
                var selectListItem = new SelectListItem
                {
                    Text  = keyValuePair.Key.Name,
                    Value = keyValuePair.Value,
                };

                if (!string.IsNullOrEmpty(keyValuePair.Key.Group))
                {
                    if (!groupList.ContainsKey(keyValuePair.Key.Group))
                    {
                        groupList[keyValuePair.Key.Group] = new SelectListGroup()
                        {
                            Name = keyValuePair.Key.Group
                        };
                    }

                    selectListItem.Group = groupList[keyValuePair.Key.Group];
                }

                selectList.Add(selectListItem);
            }

            return(selectList);
        }
예제 #4
0
        /// <inheritdoc />
        public IEnumerable <SelectListItem> GetEnumSelectList(Type enumType)
        {
            if (enumType == null)
            {
                throw new ArgumentNullException(nameof(enumType));
            }

            var metadata = MetadataProvider.GetMetadataForType(enumType);

            if (!metadata.IsEnum || metadata.IsFlagsEnum)
            {
                var message = Resources.FormatHtmlHelper_TypeNotSupported_ForGetEnumSelectList(
                    enumType.FullName,
                    nameof(Enum).ToLowerInvariant(),
                    nameof(FlagsAttribute));
                throw new ArgumentException(message, nameof(enumType));
            }

            return(GetEnumSelectList(metadata));
        }