public void Map(IDynamicDataModelSchema details, Type modelType) { if (details == null) { throw new ArgumentNullException(nameof(details)); } if (modelType == null) { throw new ArgumentNullException(nameof(modelType)); } var dataModelMetaData = _modelMetadataProvider.GetMetadataForType(modelType); details.DataTemplateName = StringHelper.FirstNonEmpty( dataModelMetaData.TemplateHint, dataModelMetaData.DataTypeName ); var properiesMetaData = _modelMetadataProvider.GetMetadataForProperties(modelType); var dataModelProperties = new List <DynamicDataModelSchemaProperty>(); foreach (var propertyMetaData in properiesMetaData.OrderBy(p => p.Order)) { var property = new DynamicDataModelSchemaProperty(); property.Name = propertyMetaData.PropertyName; property.DisplayName = propertyMetaData.DisplayName; property.Description = propertyMetaData.Description; property.IsRequired = propertyMetaData.IsRequired; property.DataTemplateName = StringHelper.FirstNonEmpty( propertyMetaData.TemplateHint, propertyMetaData.DataTypeName, propertyMetaData.IsNullableValueType ? propertyMetaData.ModelType.GenericTypeArguments[0].Name : propertyMetaData.ModelType.Name ); // Not sure why the keys here could be objects, but we're not interested in // them if they are. property.AdditionalAttributes = propertyMetaData .AdditionalValues .Where(d => d.Key is string) .ToDictionary(d => (string)d.Key, d => d.Value); dataModelProperties.Add(property); } details.DataModelProperties = dataModelProperties.ToArray(); // A default constructor is required for data model seralization anyway // so that constraint isn't an issue here. details.DefaultValue = new DynamicDataModelDefaultValue(); details.DefaultValue.Value = Activator.CreateInstance(modelType); }
private static void ApplyModelMetadata(this JqGridSubgridModel subgridModel, IModelMetadataProvider metadataProvider) { Type jqGridsubgridModelType = subgridModel.GetType(); if (jqGridsubgridModelType.IsConstructedGenericType && jqGridsubgridModelType.GetGenericTypeDefinition() == typeof(JqGridSubgridModel <>)) { foreach (ModelMetadata columnMetadata in metadataProvider.GetMetadataForProperties(jqGridsubgridModelType.GenericTypeArguments[0])) { if (IsValidForColumn(columnMetadata)) { subgridModel.AddColumn(CreateJqGridSubgridColumnModel(columnMetadata)); } } } }
internal static void ApplyModelMetadata(this JqGridOptions options, IModelMetadataProvider metadataProvider) { Type jqGridOptionsType = options.GetType(); if (jqGridOptionsType.IsConstructedGenericType && jqGridOptionsType.GetGenericTypeDefinition() == typeof(JqGridOptions <>)) { foreach (ModelMetadata columnMetadata in metadataProvider.GetMetadataForProperties(jqGridOptionsType.GenericTypeArguments[0])) { if (IsValidForColumn(columnMetadata)) { options.AddColumn(columnMetadata.GetDisplayName(), CreateJqGridColumnModel(columnMetadata)); } } } }
/// <inheritdoc/> public IEnumerable <ModelMetadata> GetMetadataForProperties(Type modelType) { if (actionExecutionModel != null && typeof(ActionExecutionModel).IsAssignableFrom(modelType) && originalModelMetadataProvider is not ActionExecutionModelMetadataProviderScope) { var compositeMetadataDetailsProvider = controller.HttpContext.RequestServices.GetService <ICompositeMetadataDetailsProvider>(); var metadata = ActionExecutionModelMetadataFactory.GetMetadata(originalModelMetadataProvider, compositeMetadataDetailsProvider, actionExecutionModel); return(metadata.GetMetadataForProperties(modelType)); } else { return(originalModelMetadataProvider.GetMetadataForProperties(modelType)); } }
internal static void ApplyModelMetadata(this JqGridOptions options, IModelMetadataProvider metadataProvider, IUrlHelper urlHelper) { IJqGridStronglyTypedOptions jqGridStronglyTypedOptions = options as IJqGridStronglyTypedOptions; if (jqGridStronglyTypedOptions != null) { foreach (ModelMetadata columnMetadata in metadataProvider.GetMetadataForProperties(jqGridStronglyTypedOptions.ModelType)) { if (IsValidForColumn(columnMetadata)) { options.AddColumn(columnMetadata.GetDisplayName(), CreateJqGridColumnModel(columnMetadata, urlHelper)); } } if (jqGridStronglyTypedOptions.ActionsColumn != null) { if (jqGridStronglyTypedOptions.ActionsColumn.Position >= options.ColumnsModels.Count) { options.AddColumn(_actionsColumnDisplayName, CreateActionsColumnModel(jqGridStronglyTypedOptions.ActionsColumn)); } else { options.InsertColumn(jqGridStronglyTypedOptions.ActionsColumn.Position, _actionsColumnDisplayName, CreateActionsColumnModel(jqGridStronglyTypedOptions.ActionsColumn)); } } } if (options.SubgridEnabled) { if (options.SubgridOptions != null) { options.SubgridOptions.ApplyModelMetadata(metadataProvider, urlHelper); } else if (options.SubgridModel != null) { options.SubgridModel.ApplyModelMetadata(metadataProvider); } } }
private void Initialize() { var assembly = Assembly.GetExecutingAssembly(); var types = assembly.GetTypes(); var filteredTypes = types.Where(t => t.IsSubclassOf(typeof(T))); if (typeof(T).IsInterface) { filteredTypes = types.Where(t => !t.IsInterface && t.GetInterfaces().Any(i => i == typeof(T))); } foreach (var type in filteredTypes) { if (type.GetCustomAttribute <ForPropertyTypeAttribute>() is var forTypeAttribute && forTypeAttribute != null) { _filterTypeMap[(int)forTypeAttribute.Type] = type; } if (type.GetCustomAttribute <ForPropertyAttribute>() is var forIdAttribute && forIdAttribute != null) { _filterIdMap[forIdAttribute.PropertyId] = type; } var ctor = type.GetConstructor(new Type[] { }); if (ctor == null) { throw new Exception($"Type '{type}' does not have parameterless constructor"); } _factories[type] = (Func <object>)Expression.Lambda(Expression.New(ctor)).Compile(); _filterMetadata[type] = _metadataProvider.GetMetadataForType(type); _propertiesMetadata[type] = _metadataProvider.GetMetadataForProperties(type).ToList(); } }
/// <inheritdoc /> public override IEnumerable <ModelMetadata> GetMetadataForProperties(Type modelType) { return(_provider.GetMetadataForProperties(modelType)); }
/// <summary> /// Get the localized DisplayName for the property of a model with <see cref="System.ComponentModel.DataAnnotations"/>. /// </summary> /// <typeparam name="T">The type of the class.</typeparam> /// <param name="propertyName">The field name to get the localized DisplayName.</param> /// <returns>Returns the localized DisplayName, or NULL if the name was not found</returns> public string GetDisplayName <T>(string propertyName) { var mdp = _metadataProvider.GetMetadataForProperties(typeof(T)); return(mdp.FirstOrDefault(d => d.Name == propertyName)?.DisplayName); // localized if resource file is present }