public Task BindModelAsync(ModelBindingContext bindingContext) { var ResultObject = new List <EventViewModel>(); if (bindingContext == null) { throw new ArgumentNullException(nameof(bindingContext)); } var clueValue = bindingContext.HttpContext.Request.Form.Select(s => s.Key + "=" + s.Value); var urlParamsString = String.Join('&', clueValue); var json = new URLParamsToJsonConverter().Covert(urlParamsString) as JObject; var view = json.ToString(); IList <string> entitiesNames = json.Properties().Select(p => p.Name).ToList(); entitiesNames.Remove("account"); entitiesNames.Remove("task"); // Задачи не обрабатываюся и нет моделей Dictionary <string, Type> TypeForEvent = new Dictionary <string, Type> { { "contacts", typeof(ContactViewModel) }, { "leads", typeof(LeadViewModel) } }; foreach (var entityName in entitiesNames) { var eventsNames = (json[entityName] as JObject) .Properties().Select(p => p.Name).ToList(); foreach (var eventName in eventsNames) { var item = new EventViewModel(); item.Entity = entityName; item.Event = eventName; item.Entities = new List <EntityBase>(); foreach (var i in json[entityName][eventName]) { var obj = ((JObject)i).ToObject(TypeForEvent[entityName]); item.Entities.Add(obj as EntityBase); } ResultObject.Add(item); } } bindingContext.Result = ModelBindingResult.Success(ResultObject); return(Task.CompletedTask); }
public Task BindModelAsync(ModelBindingContext bindingContext) { var ResultObject = new ListenedEvent(); if (bindingContext == null) { throw new ArgumentNullException(nameof(bindingContext)); } var ttt = bindingContext.HttpContext.Request.Form; var strFull = ttt.Select(s => s.Key + "=" + s.Value); var asd = String.Join('&', strFull); var result3 = new URLParamsToJsonConverter().Covert(asd); var view = result3.ToString(); var names = bindingContext.HttpContext.Request.Form.Keys.FirstOrDefault().Split("[").Select(x => x.Replace("]", "")).ToArray(); char[] charsToTrim = { '\n', '\r', ' ' }; ResultObject.Entity = names[0].Trim(charsToTrim); string @event = names[1].Trim(charsToTrim); ResultObject.Events = GetEvents(ResultObject.Entity, @event, bindingContext); ResultObject.EntityId = bindingContext.ValueProvider.GetValue(ResultObject.Entity + "." + @event + "[0].id").FirstValue; ResultObject.ContactType = bindingContext.ValueProvider.GetValue(ResultObject.Entity + "." + @event + "[0].type").FirstValue; ResultObject.Account = bindingContext.ValueProvider.GetValue("account.subdomain").FirstValue; bindingContext.Result = ModelBindingResult.Success(ResultObject); return(Task.CompletedTask); }