예제 #1
0
        private static string GetDisplayValue(Type enumType, object enumValue)
        {
            if (EnumHelper.IsValidForEnumHelper(enumType))
            {
                var enumName = Enum.GetName(enumType, enumValue);

                var enumField = enumType.GetField(enumName, BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public);

                if (enumField != null)
                {
                    var attr = enumField.GetCustomAttribute <DisplayAttribute>(inherit: false);

                    if (attr != null)
                    {
                        string name = attr.GetName();

                        if (!string.IsNullOrWhiteSpace(name))
                        {
                            return(name);
                        }
                    }
                }
            }

            return(null);
        }
예제 #2
0
        public static MvcHtmlString EnumDropDownListFor <TModel, TEnum>(this HtmlHelper <TModel> htmlHelper,
                                                                        Expression <Func <TModel, TEnum> > expression, string optionLabel, IDictionary <string, object> htmlAttributes)
        {
            if (expression == null)
            {
                throw Error.ArgumentNull("expression");
            }

            ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            if (metadata == null)
            {
                throw Error.Argument("expression", MvcResources.SelectExtensions_InvalidExpressionParameterNoMetadata,
                                     expression.ToString());
            }

            if (metadata.ModelType == null)
            {
                throw Error.Argument("expression", MvcResources.SelectExtensions_InvalidExpressionParameterNoModelType,
                                     expression.ToString());
            }

            if (!EnumHelper.IsValidForEnumHelper(metadata.ModelType))
            {
                throw Error.Argument("expression", MvcResources.SelectExtensions_InvalidExpressionParameterType,
                                     metadata.ModelType.FullName);
            }

            // Run through same processing as SelectInternal() to determine selected value and ensure it is included
            // in the select list.
            string expressionName     = ExpressionHelper.GetExpressionText(expression);
            string expressionFullName =
                htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expressionName);
            Enum currentValue = null;

            if (!String.IsNullOrEmpty(expressionFullName))
            {
                currentValue = htmlHelper.GetModelStateValue(expressionFullName, typeof(Enum)) as Enum;
            }

            if (currentValue == null && !String.IsNullOrEmpty(expressionName))
            {
                // Ignore any select list (enumerable with this name) in the view data
                currentValue = htmlHelper.ViewData.Eval(expressionName) as Enum;
            }

            if (currentValue == null)
            {
                currentValue = metadata.Model as Enum;
            }

            return(DropDownListHelper(htmlHelper, metadata, expressionName,
                                      EnumHelper.GetSelectList(metadata.ModelType, currentValue), optionLabel, htmlAttributes));
        }
예제 #3
0
        public static MvcHtmlString EnumDropDownListFor <TModel, TEnum>(this HtmlHelper <TModel> htmlHelper,
                                                                        Expression <Func <TModel, TEnum> > expression, string optionLabel, IDictionary <string, object> htmlAttributes)
        {
            if (expression == null)
            {
                throw Error.ArgumentNull("expression");
            }

            ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            if (metadata == null)
            {
                throw Error.Argument("expression", MvcResources.SelectExtensions_InvalidExpressionParameterNoMetadata,
                                     expression.ToString());
            }

            if (metadata.ModelType == null)
            {
                throw Error.Argument("expression", MvcResources.SelectExtensions_InvalidExpressionParameterNoModelType,
                                     expression.ToString());
            }

            if (!EnumHelper.IsValidForEnumHelper(metadata.ModelType))
            {
                string formatString;
                if (EnumHelper.HasFlags(metadata.ModelType))
                {
                    formatString = MvcResources.SelectExtensions_InvalidExpressionParameterTypeHasFlags;
                }
                else
                {
                    formatString = MvcResources.SelectExtensions_InvalidExpressionParameterType;
                }

                throw Error.Argument("expression", formatString, metadata.ModelType.FullName, "Flags");
            }

            // Run through same processing as SelectInternal() to determine selected value and ensure it is included
            // in the select list.
            string expressionName     = ExpressionHelper.GetExpressionText(expression);
            string expressionFullName =
                htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expressionName);
            Enum currentValue = null;

            if (!String.IsNullOrEmpty(expressionFullName))
            {
                currentValue = htmlHelper.GetModelStateValue(expressionFullName, metadata.ModelType) as Enum;
            }

            if (currentValue == null && !String.IsNullOrEmpty(expressionName))
            {
                // Ignore any select list (enumerable with this name) in the view data
                currentValue = htmlHelper.ViewData.Eval(expressionName) as Enum;
            }

            if (currentValue == null)
            {
                currentValue = metadata.Model as Enum;
            }

            IList <SelectListItem> selectList = EnumHelper.GetSelectList(metadata.ModelType, currentValue);

            if (!String.IsNullOrEmpty(optionLabel) && selectList.Count != 0 && String.IsNullOrEmpty(selectList[0].Text))
            {
                // Were given an optionLabel and the select list has a blank initial slot.  Combine.
                selectList[0].Text = optionLabel;

                // Use the option label just once; don't pass it down the lower-level helpers.
                optionLabel = null;
            }

            return(DropDownListHelper(htmlHelper, metadata, expressionName, selectList, optionLabel, htmlAttributes));
        }