コード例 #1
0
        public virtual MvcHtmlString Build(TModel model, BootstrapFormType formType, bool renderButtons = true)
        {
            var  sb               = new StringBuilder(2000);
            var  formElements     = ExtractElementsToRender(model);
            var  groupsofElements = formElements.OrderBy(x => x.ControlSpecs.GroupName).GroupBy(x => x.ControlSpecs.GroupName);
            bool useLegend        = (formElements.Select(x => x.ControlSpecs.GroupName).Distinct().Count() > 1);

            var stringWriter = new StringWriter(sb);

            using (var textWriter = new NavHtmlTextWritter(stringWriter))
            {
                RenderHiddenFields(model, formElements, textWriter);

                foreach (var groupedElements in groupsofElements)
                {
                    var groupName = (!String.IsNullOrEmpty(groupedElements.Key)) ? groupedElements.Key : "General";

                    using (new ElementGroup(textWriter, groupName, useLegend))
                    {
                        var elementsToRender = groupedElements.Where(x => x.ControlSpecs.Control != ControlType.Hidden)
                                               .OrderBy(x => x.ControlSpecs.Order);

                        // loop over the attributes (ordered)..
                        foreach (var formElement in elementsToRender)
                        {
                            using (new ControlGroup(textWriter))
                            {
                                ControlGroup.RenderLabel(formType, formElement, textWriter);

                                using (new ControlContainer(textWriter))
                                {
                                    // Control
                                    RenderElement(textWriter, model, formElement);
                                }
                            }
                        }
                    }
                }

                if (renderButtons)
                {
                    RenderButtons(textWriter);
                }

                return(new MvcHtmlString(sb.ToString()));
            }
        }