protected void Process(RenderTreeBuilder builder2, IGrouping <int, IMField> groupResult) { if (groupResult.Key != 0 && !IsInTableRow) { builder2.OpenElement(10, "div"); builder2.AddAttribute(11, "class", "m-form-row" + (groupResult.Count() > 1 ? " multiple-forms-in-row" : string.Empty)); } foreach (var field in groupResult) { string cssClass = "form-group col-"; //TODO we use bootstrap here - good idea or bad? if (groupResult.Key == 0) { cssClass += "12"; } else { cssClass += 12 / groupResult.Count(); } if (field is IMPropertyField propField) { var propertyInfo = GetPropertyInfo(propField); if (propertyInfo.GetCustomAttribute <HiddenAttribute>() != null) { continue; } var inpId = Guid.NewGuid(); if (IsInTableRow) { builder2.OpenElement(16, "td"); builder2.AddAttribute(281, "data-is-in-table-row"); if (field.AdditionalAttributes != null && field.AdditionalAttributes.TryGetValue(Extensions.MFORM_IN_TABLE_ROW_TD_STYLE_ATTRIBUTE, out object value)) { builder2.AddAttribute(247, "style", value); } if (propertyInfo.PropertyType != null) { AddInput(builder2, field, propertyInfo, inpId); } builder2.CloseElement(); continue; } if (groupResult.Key == 0) { builder2.OpenElement(10, "div"); builder2.AddAttribute(11, "class", "m-form-row"); } // <div class="form-group"> builder2.OpenElement(10, "div"); builder2.AddAttribute(272, "class", cssClass); // <label for="@inpId">@property.Name</label> builder2.OpenElement(275, "label"); builder2.AddAttribute(276, "for", inpId); builder2.AddAttribute(277, "class", "col-sm-12 col-form-label"); //TODO we use bootstrap here - good idea or bad? builder2.AddMarkupContent(286, propertyInfo.GetDisplayName(L, true)); if (propertyInfo.GetCustomAttribute <RequiredAttribute>() != null) { builder2.OpenElement(291, "span"); builder2.AddAttribute(292, "style", "color: red;"); builder2.AddContent(293, " *"); builder2.CloseElement(); } builder2.CloseElement(); if (propField.TemplateAfterLabel != null) { builder2.AddContent(294, propField.TemplateAfterLabel); } builder2.OpenElement(296, "div"); builder2.AddAttribute(297, "class", "col-sm-12"); //TODO we use bootstrap here - good idea or bad? AddInput(builder2, field, propertyInfo, inpId); builder2.CloseElement(); // </div> builder2.CloseElement(); // </div> if (groupResult.Key == 0) { builder2.CloseElement(); // </div> } } else if (field is IMFieldGenerator fieldGenerator) { MFieldGeneratorContext context = new MFieldGeneratorContext() { Form = this }; if (IsInTableRow) { builder2.OpenElement(16, "td"); } // <div class="form-group"> builder2.OpenElement(10, "div"); builder2.AddAttribute(272, "class", cssClass); builder2.AddContent(42, fieldGenerator.Template?.Invoke(context)); builder2.CloseElement(); if (IsInTableRow) { builder2.CloseElement(); } } else if (field is MFieldComponent mfieldComponent) { builder2.OpenComponent(336, mfieldComponent.CompnentType); if (mfieldComponent.AdditionalAttributes != null) { builder2.AddMultipleAttributes(339, mfieldComponent.AdditionalAttributes); } builder2.CloseComponent(); } } if (groupResult.Key != 0 && !IsInTableRow) { builder2.CloseElement(); } }
protected void Process(RenderTreeBuilder builder2, IGrouping <int, IMField> groupResult) { if (groupResult.Key != 0 && !IsInTableRow) { builder2.OpenElement(10, "div"); builder2.AddAttribute(11, "class", "m-form-row" + (groupResult.Count() > 1 ? " multiple-forms-in-row" : string.Empty)); } foreach (var field in groupResult) { if (field is IMPropertyField propField) { var propertyInfo = GetPropertyInfo(propField); if (propertyInfo.GetCustomAttribute(typeof(HiddenAttribute)) != null) { continue; } if (field.Attributes != null) { propertyInfo.SetAttributes(field.Attributes); } var inpId = Guid.NewGuid(); if (IsInTableRow) { builder2.OpenElement(16, "td"); // builder2.AddMultipleAttributes(17, field.AdditionalAttributes); // update 13.07.2020, add AdditionalAttributes to Input if (field.AdditionalAttributes != null && field.AdditionalAttributes.TryGetValue(Extensions.MFORM_IN_TABLE_ROW_TD_STYLE_ATTRIBUTE, out object value)) { builder2.AddAttribute(247, "style", value); } if (propertyInfo.PropertyType != null) { AddInput(builder2, field, propertyInfo, inpId); } builder2.CloseElement(); continue; } if (groupResult.Key == 0) { builder2.OpenElement(10, "div"); builder2.AddAttribute(11, "class", "m-form-row"); } // <div class="form-group"> builder2.OpenElement(10, "div"); string cssClass = "form-group col-"; //TODO we use bootstrap here - good idea or bad? if (groupResult.Key == 0) { cssClass += "12"; } else { cssClass += 12 / groupResult.Count(); } builder2.AddAttribute(11, "class", cssClass); // <label for="@inpId">@property.Name</label> builder2.OpenElement(13, "label"); builder2.AddAttribute(14, "for", inpId); builder2.AddAttribute(14, "class", "col-sm-12 col-form-label"); //TODO we use bootstrap here - good idea or bad? var displayAttribute = propertyInfo.GetCustomAttribute(typeof(DisplayAttribute)) as DisplayAttribute; if (displayAttribute != null) { builder2.AddContent(280, displayAttribute.Name); } else { builder2.AddContent(284, propertyInfo.Name); } builder2.CloseElement(); builder2.OpenElement(16, "div"); builder2.AddAttribute(17, "class", "col-sm-12"); //TODO we use bootstrap here - good idea or bad? AddInput(builder2, field, propertyInfo, inpId); builder2.CloseElement(); // </div> builder2.CloseElement(); // </div> if (groupResult.Key == 0) { builder2.CloseElement(); // </div> } } else if (field is IMFieldGenerator fieldGenerator) { MFieldGeneratorContext context = new MFieldGeneratorContext() { Form = this }; if (IsInTableRow) { builder2.OpenElement(16, "td"); } builder2.AddContent(42, fieldGenerator.Template?.Invoke(context)); if (IsInTableRow) { builder2.CloseElement(); } } } if (groupResult.Key != 0 && !IsInTableRow) { builder2.CloseElement(); } }