public MvcModelBinding(ParameterInfo parameter, ModelMetadata metadata, IModelBinder binder, IList <ValueProviderFactory> valueProviderFactories)
 {
     _parameter = parameter ?? throw new ArgumentNullException(nameof(parameter));
     _metadata  = metadata ?? throw new ArgumentNullException(nameof(metadata));
     _binder    = binder ?? throw new ArgumentNullException(nameof(binder));
     _valueProviderFactories = valueProviderFactories ?? throw new ArgumentNullException(nameof(valueProviderFactories));
 }
Exemplo n.º 2
0
        public static IHtmlContent Checkbox(this IHtmlHelper <dynamic> htmlHelper, string propertyName, object htmlAttributes = null)
        {
            IList <SelectListItem> items = GetSelectList(htmlHelper, propertyName);

            Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata = ExpressionMetadataProvider.FromStringExpression(propertyName, htmlHelper.ViewData, htmlHelper.MetadataProvider).Metadata;
            Type propertyType = GetNonNullableModelType(metadata);

            bool inline = false;

            if (metadata.AdditionalValues.ContainsKey("ModelCheckboxOrRadioInline"))
            {
                inline = ((bool)metadata.AdditionalValues["ModelCheckboxOrRadioInline"]);
            }

            var sb = new StringBuilder();

            if (propertyType != typeof(string) && (propertyType.GetInterfaces().Contains(typeof(IEnumerable))))
            {
                return(htmlHelper.ValueCheckboxList(propertyName, items, inline));
            }
            else
            {
                return(htmlHelper.ValueRadioList(propertyName, items, inline));
            }
        }
        /// <inheritdoc />
        /// <remarks>Does nothing if <see cref="DescriptionFor"/> is <c>null</c>.</remarks>
        public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (output == null)
            {
                throw new ArgumentNullException(nameof(output));
            }

            Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata = DescriptionFor.Metadata;

            if (metadata == null)
            {
                throw new InvalidOperationException(string.Format("No provided metadata ({0})", DescriptionForAttributeName));
            }

            output.Attributes.SetAttribute("id", metadata.PropertyName + "-description");

            if (!string.IsNullOrWhiteSpace(metadata.Description))
            {
                string content = String.Format("<i class=\"fas fa-exclamation-circle\" data-container=\"body\" data-toggle=\"popover\" data-trigger=\"hover\" data-placement=\"top\" data-html=\"true\" data-content=\"{0}\" aria-hidden=\"true\"></i>", metadata.Description);

                output.Content.SetHtmlContent(content);
                output.TagMode = TagMode.StartTagAndEndTag;
            }

            return(Task.CompletedTask);
        }
        public static IHtmlContent EnumDropDownListForStringValue <TModel, TEnum>(this IHtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TEnum> > expression, object htmlAttributes = null)
        {
            var modelExpressionProvider = htmlHelper.ViewContext.HttpContext.RequestServices.GetRequiredService <ModelExpressionProvider>();

            var expressionText  = modelExpressionProvider.GetExpressionText(expression);
            var modelExpression = modelExpressionProvider.CreateModelExpression(htmlHelper.ViewData, expressionText);

            var modelExplorer = modelExpression.ModelExplorer;

            Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata = modelExplorer.Metadata;

            //.NET Core 2.2
            //var modelExplorer = Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ExpressionMetadataProvider.FromLambdaExpression(expression, htmlHelper.ViewData, htmlHelper.MetadataProvider);
            //Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata = modelExplorer.Metadata;

            Type enumType     = GetNonNullableModelType(metadata);
            Type baseEnumType = Enum.GetUnderlyingType(enumType);

            var items = ToSelectList(enumType).ToList();

            if (metadata.IsNullableValueType)
            {
                items.Insert(0, new SelectListItem {
                    Text = "", Value = ""
                });
            }

            return(htmlHelper.DropDownListFor(expression, items, htmlAttributes));
        }
        private static Type GetNonNullableModelType(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata modelMetadata)
        {
            Type realModelType  = modelMetadata.ModelType;
            Type underlyingType = Nullable.GetUnderlyingType(realModelType);


            if (underlyingType != null)
            {
                realModelType = underlyingType;
            }

            return(realModelType);
        }
Exemplo n.º 6
0
        public static string GetEisppRuleElement(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata model, string fieldPrefix)
        {
            if (!fieldPrefix.StartsWith("Data.Events[0]."))
            {
                fieldPrefix = "Data.Events[0]." + fieldPrefix.Replace("NewEventObj.", "");
            }

            fieldPrefix = model.GetEisppRulePath(fieldPrefix + ".");
            if (fieldPrefix.EndsWith("."))
            {
                fieldPrefix = fieldPrefix.Substring(0, fieldPrefix.Length - 1);
            }
            return(fieldPrefix);
        }
Exemplo n.º 7
0
        public static IHtmlContent DropDownList(this IHtmlHelper <dynamic> htmlHelper, string propertyName, object htmlAttributes = null)
        {
            IList <SelectListItem> items = GetSelectList(htmlHelper, propertyName);

            Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata = ExpressionMetadataProvider.FromStringExpression(propertyName, htmlHelper.ViewData, htmlHelper.MetadataProvider).Metadata;
            Type propertyType = GetNonNullableModelType(metadata);

            if (propertyType != typeof(string) && (propertyType.GetInterfaces().Contains(typeof(IEnumerable))))
            {
                return(htmlHelper.ListBox(propertyName, items, htmlAttributes));
            }
            else
            {
                return(htmlHelper.DropDownList(propertyName, items, htmlAttributes));
            }
        }
Exemplo n.º 8
0
        public static IHtmlContent CheckboxButtons(this IHtmlHelper <dynamic> htmlHelper, string propertyName, bool groupRadioButtons, object htmlAttributes = null, object labelCheckboxHtmlAttributes = null, object labelRadioHtmlAttributes = null)
        {
            IList <SelectListItem> items = GetSelectList(htmlHelper, propertyName);

            Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata = ExpressionMetadataProvider.FromStringExpression(propertyName, htmlHelper.ViewData, htmlHelper.MetadataProvider).Metadata;
            Type propertyType = GetNonNullableModelType(metadata);

            var sb = new StringBuilder();

            if (propertyType != typeof(string) && (propertyType.GetInterfaces().Contains(typeof(IEnumerable))))
            {
                return(htmlHelper.ValueCheckboxButtonList(propertyName, items, htmlAttributes, labelCheckboxHtmlAttributes));
            }
            else
            {
                return(htmlHelper.ValueRadioButtonList(propertyName, items, groupRadioButtons, htmlAttributes, labelRadioHtmlAttributes));
            }
        }
        public static IList <SelectListItem> GetSelectList(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, Enum value)
        {
            if (metadata == null)
            {
                throw new NullReferenceException();
            }

            if (metadata.ModelType == null)
            {
                throw new Exception("Invalid model type");
            }

            if (!IsValidForEnumHelper(metadata))
            {
                throw new Exception("Invalid type");
            }

            return(GetSelectList(metadata.ModelType, value));
        }
Exemplo n.º 10
0
        public static string GetEisppRulePath(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata model, string fieldPrefix)
        {
            try
            {
                for (int i = 0; i < 10; i++)
                {
                    fieldPrefix = fieldPrefix.Replace(i.ToString(), "", StringComparison.InvariantCultureIgnoreCase);
                }
                fieldPrefix = fieldPrefix.Replace("[]", "", StringComparison.InvariantCultureIgnoreCase);
                fieldPrefix = fieldPrefix.Replace("Data.Events.", "", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace("CriminalProceeding.", "NPR.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".Case.", ".DLO.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".Status.", ".DLOSTA.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".ConnectedCases.", ".DLOOSN.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".Persons.", ".FZL.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".Punishments.", ".NKZ.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".ProbationMeasure.", ".PBC.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".Crimes.", ".PNE.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".PersonCPStatus.", ".NPRFZLSTA.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".CrimeStatus.", ".PNESTA.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".CPPersonCrimes.", ".NPRFZLPNE.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".CrimeSanction.", ".SCQ.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".Measures.", ".MPP.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".BirthPlace.", ".MRD.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace("EisppSrok.", "SRK.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace("EventFeature.", "SBH.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".CrimePunishments.", ".NKZPNE.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".CrimeSubjectStatisticData.", ".SBC.", StringComparison.InvariantCulture);
                fieldPrefix = fieldPrefix.Replace(".CiminalProceedingCrime.", ".NPRPNESTA.", StringComparison.InvariantCulture);
                if (fieldPrefix.Contains("NPR.DLO.PNE.NPRFZLPNE.SCQ.", StringComparison.InvariantCulture) ||
                    fieldPrefix.Contains("NPR.DLO.PNE.NPRFZLPNE.SBC.", StringComparison.InvariantCulture))
                {
                    fieldPrefix = fieldPrefix.Replace(".PNE.", ".", StringComparison.InvariantCulture);
                }
                return(fieldPrefix);
            }
            catch (Exception ex)
            {
            }

            return("");
        }
Exemplo n.º 11
0
        public static IHtmlContent EnumDropDownListForStringValue <TModel, TEnum>(this IHtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TEnum> > expression, object htmlAttributes = null)
        {
            var modelExplorer = ExpressionMetadataProvider.FromLambdaExpression(expression, htmlHelper.ViewData, htmlHelper.MetadataProvider);

            Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata = modelExplorer.Metadata;

            Type enumType     = GetNonNullableModelType(metadata);
            Type baseEnumType = Enum.GetUnderlyingType(enumType);

            var items = ToSelectList(enumType).ToList();

            if (metadata.IsNullableValueType)
            {
                items.Insert(0, new SelectListItem {
                    Text = "", Value = ""
                });
            }

            return(htmlHelper.DropDownListFor(expression, items, htmlAttributes));
        }
Exemplo n.º 12
0
        public static string GetEisppRuleFullName(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata model, string fieldPrefix, bool isVM)
        {
            try
            {
                if (model.ContainerType != null)
                {
                    if (!fieldPrefix.StartsWith("Data.Events[0]."))
                    {
                        fieldPrefix = "Data.Events[0]." + fieldPrefix.Replace("NewEventObj.", "");
                    }
                    fieldPrefix = model.GetEisppRulePath(fieldPrefix);

                    string propertyName = model.PropertyName;
                    if (isVM && propertyName.EndsWith("VM"))
                    {
                        propertyName = propertyName.Substring(0, propertyName.Length - 2);
                    }
                    var      Member  = model.ContainerType.GetMember(propertyName);
                    object[] attribs = Member[0].GetCustomAttributes(typeof(System.Xml.Serialization.XmlAttributeAttribute), false);
                    bool     doesPropertyHaveAttrib = attribs.Length > 0;
                    if (doesPropertyHaveAttrib)
                    {
                        string name = ((System.Xml.Serialization.XmlAttributeAttribute)attribs[0]).AttributeName;
                        if (fieldPrefix.Contains("."))
                        {
                            fieldPrefix = fieldPrefix.Replace("." + model.PropertyName, "." + name, StringComparison.InvariantCulture);
                        }
                        else
                        {
                            fieldPrefix = fieldPrefix.Replace(model.PropertyName, name, StringComparison.InvariantCulture);
                        }
                        return(fieldPrefix);
                    }
                }
            }
            catch (Exception ex)
            {
            }

            return("");
        }
Exemplo n.º 13
0
        public static string GetIOReqClass(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata model)
        {
            string result = "";

            try
            {
                if (model.ContainerType != null)
                {
                    var Member   = model.ContainerType.GetMember(model.PropertyName);
                    var reqTypes = new[] { typeof(Attributes.IORequiredAttribute), typeof(RequiredAttribute), typeof(RangeAttribute) };
                    var hasIOreq = Member[0].CustomAttributes.Any(a => reqTypes.Contains(a.AttributeType));
                    if (hasIOreq)
                    {
                        result = "io-req";
                    }
                }
            }
            catch { }

            return(result);
        }
        public static IHtmlContent EnumDropDownListForStringValue <TModel, TEnum>(this IHtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TEnum> > expression, object htmlAttributes = null)
        {
            var modelExplorer = ExpressionMetadataProvider.FromLambdaExpression(expression, htmlHelper.ViewData, htmlHelper.MetadataProvider);

            Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata = modelExplorer.Metadata;

            Type enumType               = GetNonNullableModelType(metadata);
            Type baseEnumType           = Enum.GetUnderlyingType(enumType);
            List <SelectListItem> items = new List <SelectListItem>();


            foreach (FieldInfo field in enumType.GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public))
            {
                string text     = field.Name;
                string value    = field.Name;
                bool   selected = field.GetValue(null).Equals(modelExplorer.Model);

                foreach (DisplayAttribute displayAttribute in field.GetCustomAttributes(true).OfType <DisplayAttribute>())
                {
                    text = displayAttribute.GetName();
                }

                items.Add(new SelectListItem()
                {
                    Text     = text,
                    Value    = value,
                    Selected = selected
                });
            }

            if (metadata.IsNullableValueType)
            {
                items.Insert(0, new SelectListItem {
                    Text = "", Value = ""
                });
            }

            return(htmlHelper.DropDownListFor(expression, items, htmlAttributes));
        }
 public static bool IsValidForEnumHelper(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata)
 {
     return(metadata != null && IsValidForEnumHelper(metadata.ModelType));
 }
Exemplo n.º 16
0
 public FluentValidationModelValidator(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, IValidator validator)
 {
     this.validator = validator;
     //customizations = null;// CustomizeValidatorAttribute.GetFromControllerContext(actionContext) ?? new CustomizeValidatorAttribute();
 }
        public static IList <SelectListItem> GetSelectListFromDatabase <TDbContext>(this IHtmlHelper <dynamic> htmlHelper, string propertyName, bool selectedOnly = false) where TDbContext : DbContext
        {
            var modelExplorer = ExpressionMetadataProvider.FromStringExpression(propertyName, htmlHelper.ViewData, htmlHelper.MetadataProvider);

            Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata = modelExplorer.Metadata;

            var dropdownModelType = ((Type)metadata.AdditionalValues["DropdownModelType"]);
            var keyProperty       = ((string)metadata.AdditionalValues["KeyProperty"]);
            var valueProperty     = ((string)metadata.AdditionalValues["DisplayExpression"]);
            var bindingProperty   = ((string)metadata.AdditionalValues["BindingProperty"]);

            var orderByProperty = ((string)metadata.AdditionalValues["OrderByProperty"]);
            var orderByType     = ((string)metadata.AdditionalValues["OrderByType"]);

            var physicalFilePath = ((string)metadata.AdditionalValues["PhysicalFilePath"]);
            var fileFolderId     = ((string)metadata.AdditionalValues["FileFolderId"]);

            if (!string.IsNullOrEmpty(fileFolderId))
            {
                physicalFilePath = Server.GetWwwFolderPhysicalPathById(fileFolderId);
            }
            var physicalFolderPath = ((string)metadata.AdditionalValues["PhysicalFolderPath"]);
            var folderFolderId     = ((string)metadata.AdditionalValues["FolderFolderId"]);

            if (!string.IsNullOrEmpty(folderFolderId))
            {
                physicalFolderPath = Server.GetWwwFolderPhysicalPathById(folderFolderId);
            }

            var nullable = ((bool)metadata.AdditionalValues["Nullable"]);

            var options = ((IEnumerable <string>)metadata.AdditionalValues["Options"]);

            Type propertyType           = GetNonNullableModelType(metadata);
            List <SelectListItem> items = new List <SelectListItem>();
            List <string>         ids   = new List <string>();

            if (propertyType != typeof(string) && (propertyType.GetInterfaces().Contains(typeof(IEnumerable))))
            {
                if (modelExplorer.Model != null)
                {
                    foreach (var val in (IEnumerable)modelExplorer.Model)
                    {
                        if (val != null)
                        {
                            if (!string.IsNullOrWhiteSpace(bindingProperty))
                            {
                                ids.Add(val.GetPropValue(bindingProperty).ToString());
                            }
                            else
                            {
                                ids.Add(val.ToString());
                            }
                        }
                    }
                }
            }
            else
            {
                if (modelExplorer.Model != null)
                {
                    if (!string.IsNullOrWhiteSpace(bindingProperty))
                    {
                        ids.Add(modelExplorer.Model.GetPropValue(bindingProperty).ToString());
                    }
                    else
                    {
                        ids.Add(modelExplorer.Model.ToString());
                    }
                }
            }

            if (!string.IsNullOrEmpty(physicalFolderPath))
            {
                var repository = htmlHelper.FileSystemGenericRepositoryFactory().CreateFolderRepositoryReadOnly(default(CancellationToken), physicalFolderPath, true);
                var data       = repository.GetAll(LamdaHelper.GetOrderByFunc <DirectoryInfo>(orderByProperty, orderByType), null, null);
                keyProperty = nameof(DirectoryInfo.FullName);

                data.ToList().ForEach(item =>

                                      items.Add(new SelectListItem()
                {
                    Text     = GetDisplayString(htmlHelper, item, valueProperty).Replace(physicalFolderPath, ""),
                    Value    = item.GetPropValue(nameof(DirectoryInfo.FullName)) != null ? item.GetPropValue(nameof(DirectoryInfo.FullName)).ToString().Replace(physicalFolderPath, "") : "",
                    Selected = item.GetPropValue(keyProperty) != null && ids.Contains(item.GetPropValue(keyProperty).ToString().Replace(physicalFolderPath, ""))
                }));
            }
            else if (!string.IsNullOrEmpty(physicalFilePath))
            {
                var repository = htmlHelper.FileSystemGenericRepositoryFactory().CreateFileRepositoryReadOnly(default(CancellationToken), physicalFilePath, true);
                var data       = repository.GetAll(LamdaHelper.GetOrderByFunc <FileInfo>(orderByProperty, orderByType), null, null);
                keyProperty = nameof(FileInfo.FullName);

                data.ToList().ForEach(item =>

                                      items.Add(new SelectListItem()
                {
                    Text     = GetDisplayString(htmlHelper, item, valueProperty),
                    Value    = item.GetPropValue(keyProperty) != null ? item.GetPropValue(keyProperty).ToString().Replace(physicalFilePath, "") : "",
                    Selected = item.GetPropValue(keyProperty) != null && ids.Contains(item.GetPropValue(keyProperty).ToString().Replace(physicalFilePath, ""))
                }));
            }
            else if (metadata.DataTypeName == "ModelRepeater")
            {
                foreach (var item in htmlHelper.ViewData.Model)
                {
                    var itemObject = (Object)item;

                    items.Add(new SelectListItem()
                    {
                        Text     = GetDisplayString(htmlHelper, item, valueProperty),
                        Value    = itemObject.GetPropValue(keyProperty) != null ? itemObject.GetPropValue(keyProperty).ToString() : "",
                        Selected = itemObject.GetPropValue(keyProperty) != null && ids.Contains(itemObject.GetPropValue(keyProperty).ToString())
                    });
                }
            }
            else
            {
                //db
                if (options == null)
                {
                    using (var db = htmlHelper.DatabaseByEntityType(dropdownModelType))
                    {
                        var pi = dropdownModelType.GetProperty(orderByProperty);

                        Type iQueryableType = typeof(IQueryable <>).MakeGenericType(new[] { dropdownModelType });

                        IQueryable query = db.Queryable(dropdownModelType);

                        if (selectedOnly)
                        {
                            var whereClause = LamdaHelper.SearchForEntityByIds(dropdownModelType, ids.Cast <Object>());
                            query = (IQueryable)typeof(LamdaHelper).GetMethod(nameof(LamdaHelper.Where)).MakeGenericMethod(dropdownModelType).Invoke(null, new object[] { query, whereClause });
                        }
                        else
                        {
                            if (metadata.AdditionalValues.ContainsKey("WhereClauseEqualsDictionary"))
                            {
                                var whereClauseEqualsDictionary = (Dictionary <string, List <object> >)metadata.AdditionalValues["WhereClauseEqualsDictionary"];
                                foreach (var where in whereClauseEqualsDictionary)
                                {
                                    var whereClause = LamdaHelper.SearchForEntityByProperty(dropdownModelType, where.Key, where.Value);
                                    query = (IQueryable)typeof(LamdaHelper).GetMethod(nameof(LamdaHelper.Where)).MakeGenericMethod(dropdownModelType).Invoke(null, new object[] { query, whereClause });
                                }
                            }

                            if (!string.IsNullOrWhiteSpace(orderByProperty))
                            {
                                if (orderByType == "asc")
                                {
                                    query = (IQueryable)typeof(Utilities).GetMethod(nameof(Utilities.QueryableOrderBy)).MakeGenericMethod(dropdownModelType).Invoke(null, new object[] { query, orderByProperty, true });
                                }
                                else
                                {
                                    query = (IQueryable)typeof(Utilities).GetMethod(nameof(Utilities.QueryableOrderBy)).MakeGenericMethod(dropdownModelType).Invoke(null, new object[] { query, orderByProperty, false });
                                }
                            }
                        }

                        IEnumerable results = query.ToList(dropdownModelType);

                        foreach (var item in results)
                        {
                            items.Add(new SelectListItem()
                            {
                                Text = GetDisplayString(htmlHelper, item, valueProperty),
                                //Value = item.GetPropValue(keyProperty) != null ? item.GetPropValue(keyProperty).ToString() : "",
                                //Selected = item.GetPropValue(keyProperty) != null && ids.Contains(item.GetPropValue(keyProperty).ToString())
                                Value    = GetDisplayString(htmlHelper, item, keyProperty),
                                Selected = ids.Contains(GetDisplayString(htmlHelper, item, keyProperty))
                            });
                        }
                    }
                }
                else
                {
                    options.ToList().ForEach(item =>
                                             items.Add(new SelectListItem()
                    {
                        Text     = item,
                        Value    = item,
                        Selected = ids.Contains(item)
                    }));
                }
            }

            if (metadata.IsNullableValueType || nullable)
            {
                items.Insert(0, new SelectListItem {
                    Text = "", Value = ""
                });
            }

            return(items);
        }
 protected virtual string GetErrorMessage(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata modelMetadata, params object[] arguments)
 {
     throw null;
 }
Exemplo n.º 19
0
        public static IList <SelectListItem> GetSelectList(this IHtmlHelper <dynamic> htmlHelper, string propertyName, bool selectedOnly = false)
        {
            var modelExplorer = ExpressionMetadataProvider.FromStringExpression(propertyName, htmlHelper.ViewData, htmlHelper.MetadataProvider);

            Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata = modelExplorer.Metadata;

            var dropdownModelType = ((Type)metadata.AdditionalValues["DropdownModelType"]);
            var keyProperty       = ((string)metadata.AdditionalValues["KeyProperty"]);
            var valueProperty     = ((string)metadata.AdditionalValues["DisplayExpression"]);
            var bindingProperty   = ((string)metadata.AdditionalValues["BindingProperty"]);

            var orderByProperty = ((string)metadata.AdditionalValues["OrderByProperty"]);
            var orderByType     = ((string)metadata.AdditionalValues["OrderByType"]);

            var physicalFilePath = ((string)metadata.AdditionalValues["PhysicalFilePath"]);

            var physicalFolderPath = ((string)metadata.AdditionalValues["PhysicalFolderPath"]);

            var nullable = ((bool)metadata.AdditionalValues["Nullable"]);

            var options = ((IEnumerable <string>)metadata.AdditionalValues["Options"]);

            Type propertyType           = GetNonNullableModelType(metadata);
            List <SelectListItem> items = new List <SelectListItem>();
            List <string>         ids   = new List <string>();

            if (propertyType != typeof(string) && (propertyType.GetInterfaces().Contains(typeof(IEnumerable))))
            {
                if (modelExplorer.Model != null)
                {
                    foreach (var val in (IEnumerable)modelExplorer.Model)
                    {
                        if (val != null)
                        {
                            if (!string.IsNullOrWhiteSpace(bindingProperty))
                            {
                                ids.Add(val.GetPropValue(bindingProperty).ToString());
                            }
                            else
                            {
                                ids.Add(val.ToString());
                            }
                        }
                    }
                }
            }
            else
            {
                if (modelExplorer.Model != null)
                {
                    if (!string.IsNullOrWhiteSpace(bindingProperty))
                    {
                        ids.Add(modelExplorer.Model.GetPropValue(bindingProperty).ToString());
                    }
                    else
                    {
                        ids.Add(modelExplorer.Model.ToString());
                    }
                }
            }

            if (metadata.DataTypeName == "ModelRepeater")
            {
                foreach (var item in htmlHelper.ViewData.Model)
                {
                    var itemObject = (Object)item;

                    items.Add(new SelectListItem()
                    {
                        Text     = GetDisplayString(htmlHelper, item, valueProperty),
                        Value    = itemObject.GetPropValue(keyProperty) != null ? itemObject.GetPropValue(keyProperty).ToString() : "",
                        Selected = itemObject.GetPropValue(keyProperty) != null && ids.Contains(itemObject.GetPropValue(keyProperty).ToString())
                    });
                }
            }
            else
            {
                //db
                if (options == null)
                {
                }
                else
                {
                    options.ToList().ForEach(item =>
                                             items.Add(new SelectListItem()
                    {
                        Text     = item,
                        Value    = item,
                        Selected = ids.Contains(item)
                    }));
                }
            }

            if (metadata.IsNullableValueType || nullable)
            {
                items.Insert(0, new SelectListItem {
                    Text = "", Value = ""
                });
            }

            return(items);
        }