protected void AdjustColumns()
        {
            if (!options.NeedsRunTimeTypeCheck)
            {
                return;
            }
            var typeInfos = tag.For.Metadata.ModelType.GetTypeInfo();

            foreach (var row in options.Rows)
            {
                foreach (var col in row.VisibleAndHiddenColumns)
                {
                    if (col.AdditionalPrefix != null)
                    {
                        continue;
                    }
                    if (col.For != null && typeInfos.GetProperty(col.For.Metadata.PropertyName) == null)
                    {
                        col.AdditionalPrefix = DerivedClassesRegister.GetCodeFromType(row.For.Metadata.ModelType);
                    }
                    else
                    {
                        col.AdditionalPrefix = string.Empty;
                    }
                }
            }
        }
        public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            if (SubClassType == null)
            {
                throw new ArgumentNullException(SubClassTypeName);
            }

            if (!For.Metadata.ModelType.GetTypeInfo().IsAssignableFrom(SubClassType))
            {
                throw new ArgumentException(string.Format(DefaultMessages.NotASubclass, SubClassType.Name, For.Metadata.ModelType.Name), SubClassTypeName);
            }

            if (For.Model != null && !SubClassType.GetTypeInfo().IsAssignableFrom(For.Model.GetType()))
            {
                output.TagName = string.Empty;
                output.Content.SetHtmlContent(string.Empty);
                return;
            }

            var prefix = DerivedClassesRegister.GetCodeFromType(SubClassType);

            prefix         = combinePrefixes(For.Name, prefix);
            output.TagName = string.Empty;
            string childContent;

            using (var scope = new RenderingScope(For.Model, ViewContext.ViewData.GetFullHtmlFieldName(prefix), ViewContext.ViewData))
            {
                childContent = output.Content.IsModified ? output.Content.GetContent() :
                               (await output.GetChildContentAsync()).GetContent();
            }
            output.Content.SetHtmlContent(childContent);
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                return(null);
            }
            // Load JObject from stream
            JObject jo = JObject.Load(reader);
            // Create target object based on JObject
            JToken value = null;

            jo.TryGetValue("$type", out value);
            var type = DerivedClassesRegister.GetTypeFromCode(value.Value <string>());

            if (type != null && !objectType.GetTypeInfo().IsAssignableFrom(type))
            {
                type = null;
            }
            var target = Activator.CreateInstance(type ?? objectType);

            // Populate the object properties
            using (JsonReader jObjectReader = CopyReaderForObject(reader, jo))
            {
                serializer.Populate(jObjectReader, target);
            }
            return(target);
        }
Пример #4
0
        public override JsonContract ResolveContract(Type type)
        {
            var res = base.ResolveContract(type);

            if (res.Converter == null)
            {
                if (DerivedClassesRegister.GetCodeFromType(type, true) != null)
                {
                    res.Converter = new RuntimeTypesJsonConverter();
                }
            }
            return(res);
        }
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            var t = JToken.FromObject(value);

            if (value != null && t.Type == JTokenType.Object)
            {
                var code = DerivedClassesRegister.GetCodeFromType(value.GetType());
                if (code != null)
                {
                    (t as JObject).AddFirst(new JProperty("$type", code));
                }
            }
            t.WriteTo(writer);
        }
Пример #6
0
        public static IApplicationBuilder UseMvcControlsToolkit(this IApplicationBuilder builder)
        {
            if (initialized)
            {
                return(builder);
            }
            initialized = true;
            var options = builder.ApplicationServices.GetService(typeof(IOptions <MvcControlsToolkitOptions>)) as IOptions <MvcControlsToolkitOptions>;

            MvcControlsToolkitOptions.Instance = options.Value;
            builder.UsePreferences();
            BasicTransformationsRegistration.Registration();
            var env = builder.ApplicationServices.GetService(typeof(IHostingEnvironment)) as IHostingEnvironment;

            DerivedClassesRegister.Prepare(env);
            //TagHelpers.TagHelpersProviderExtensionsRegister.Prepare(env);
            return(builder.UseMiddleware <CoreMiddleware>());
        }
Пример #7
0
        private Type getTransformation(ModelBindingContext bindingContext, out Type fitype, out Type fdtype, out string index)
        {
            fitype = null;  fdtype = null; index = null;
            var httpContext = bindingContext.HttpContext;
            var tr          = httpContext.RequestServices.GetService <RequestTransformationsRegister>();

            if (tr == null)
            {
                return(null);
            }
            index = tr.GetIndex(bindingContext.ModelName ?? string.Empty);
            if (index == null)
            {
                return(null);
            }
            if (index.Length > 0 && index[index.Length - 1] == '_')
            {
                return(DerivedClassesRegister.GetTypeFromCode(index));
            }
            else
            {
                return(TransformationsRegister.InverseTransform(bindingContext.ModelMetadata.ModelType, index, out fitype, out fdtype));
            }
        }