private static IReadOnlyList <FormSection> RetrieveFormSections(Type formType) { var properties = formType.GetProperties().Where(p => Attribute.IsDefined(p, typeof(DataTypeAttribute))).ToList(); var sections = properties.GroupBy(p => p.GetCustomAttribute <Forms.SectionAttribute>()?.Name).ToList(); var formSections = sections?.Select(section => { var formSection = new FormSection(section?.Key ?? string.Empty, section?.Select(p => { var formProperty = new FormProperty(p); var triggerAttribute = p.GetCustomAttributes().OfType <Forms.IAmConditionalTriggerAware>()?.FirstOrDefault(); if (triggerAttribute?.ConditionalTrigger != null) { formProperty.SetConditionalTrigger(triggerAttribute.ConditionalTrigger); } var triggerTargetAttribute = p.GetCustomAttribute <Forms.ConditionalTargetAttribute>(); if (triggerTargetAttribute != null) { formProperty.SetConditionalTriggerTarget(triggerTargetAttribute.TriggerKey); } return(formProperty); }) ?? Enumerable.Empty <FormProperty>()); return(formSection); }); return(formSections.ToList() ?? Enumerable.Empty <FormSection>().ToList()); }
public static async Task <IHtmlContent> FormSectionAsync(this IHtmlHelper htmlHelper, FormSection formSection) { htmlHelper.ViewData.SetCurrentFormSection(formSection); return(await htmlHelper.PartialAsync("Forms__Form_Body_Section")); }
public static void SetCurrentFormSection(this ViewDataDictionary viewData, FormSection formSection) { viewData[CurrentSectionKey] = formSection; }