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); }
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); }
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>()); }
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)); } }