internal static string ObjectTemplate(HtmlHelper html, AngularTemplateHelpers.TemplateHelperDelegate templateHelper)
        {
            var viewData      = html.ViewContext.ViewData;
            var templateInfo  = viewData.TemplateInfo;
            var modelMetadata = viewData.ModelMetadata;
            var stringBuilder = new StringBuilder();

            if (templateInfo.TemplateDepth > 1)
            {
                if (modelMetadata.Model != null)
                {
                    return(modelMetadata.SimpleDisplayText);
                }
                else
                {
                    return(modelMetadata.NullDisplayText);
                }
            }
            // basic template for a form field that is aware of Bootstrap styles and angular form settings
            foreach (var metadata in modelMetadata.Properties.Where(pm => ShouldShow(pm, templateInfo)))
            {
                if (!metadata.HideSurroundingHtml)
                {
                    // bootstrap form-group
                    stringBuilder.Append("<div class=\"form-group\">");
                    // Label text
                    var labeltext = LabelHelperInternal(html, metadata, metadata.PropertyName, null, new Dictionary <string, object>()
                    {
                        { "class", "col-md-2 control-label" }
                    }).ToHtmlString();
                    if (!string.IsNullOrEmpty(labeltext))
                    {
                        stringBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}\r\n", labeltext);
                    }
                    stringBuilder.Append("<div class=\"col-md-10\">");
                }
                // Core element
                stringBuilder.Append(templateHelper(html, metadata, metadata.PropertyName, null, DataBoundControlMode.Edit, null));
                // End surrounding
                if (!metadata.HideSurroundingHtml)
                {
                    stringBuilder.Append("</div>\r\n");
                    // Bootstrap style help block with private extension
                    stringBuilder.AppendFormat("<span class=\"help-block-dynamic\">{0}</span>", metadata.Description);
                    stringBuilder.Append(" ");
                    stringBuilder.Append("<div class=\"col-md-offset-2\">");
                    stringBuilder.Append(html.ValidationMessage(metadata.PropertyName));
                    stringBuilder.Append("</div>\r\n");
                    stringBuilder.Append("</div>\r\n");
                }
            }
            return(stringBuilder.ToString());
        }
示例#2
0
        internal static string CollectionTemplate(HtmlHelper html, AngularTemplateHelpers.TemplateHelperDelegate templateHelper)
        {
            var model = html.ViewContext.ViewData.ModelMetadata.Model;

            if (model == null)
            {
                return(String.Empty);
            }
            var enumerable = model as IEnumerable;

            if (enumerable == null)
            {
                throw new InvalidOperationException(String.Format((IFormatProvider)CultureInfo.CurrentCulture, "Templates_TypeMustImplementIEnumerable {0}", model.GetType().FullName));
            }
            else
            {
                var type             = typeof(string);
                var genericInterface = TypeHelpers.ExtractGenericInterface(enumerable.GetType(), typeof(IEnumerable <>));
                if (genericInterface != (Type)null)
                {
                    type = genericInterface.GetGenericArguments()[0];
                }
                var flag            = TypeHelpers.IsNullableValueType(type);
                var htmlFieldPrefix = html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix;
                try {
                    html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = String.Empty;
                    var str1          = htmlFieldPrefix;
                    var stringBuilder = new StringBuilder();
                    var num           = 0;
                    try {
                        foreach (var item in enumerable)
                        {
                            var modelType = type;
                            if (item != null && !flag)
                            {
                                modelType = item.GetType();
                            }
                            var metadataForType = ModelMetadataProviders.Current.GetMetadataForType((Func <object>)(() => item), modelType);
                            var htmlFieldName   = String.Format((IFormatProvider)CultureInfo.InvariantCulture, "{0}[{1}]", str1, num++);
                            var str2            = templateHelper(html, metadataForType, htmlFieldName, null, DataBoundControlMode.ReadOnly, null);
                            stringBuilder.Append(str2);
                        }
                    } finally {
                    }
                    return(stringBuilder.ToString());
                } finally {
                    html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = htmlFieldPrefix;
                }
            }
        }
示例#3
0
        internal static string ObjectTemplate(HtmlHelper html, AngularTemplateHelpers.TemplateHelperDelegate templateHelper)
        {
            var viewData      = html.ViewContext.ViewData;
            var templateInfo  = viewData.TemplateInfo;
            var modelMetadata = viewData.ModelMetadata;
            var stringBuilder = new StringBuilder();

            if (modelMetadata.Model == null)
            {
                return(modelMetadata.NullDisplayText);
            }
            if (templateInfo.TemplateDepth > 1)
            {
                return(modelMetadata.SimpleDisplayText);
            }
            foreach (var metadata in modelMetadata.Properties.Where((Func <ModelMetadata, bool>)(pm => ShouldShow(pm, templateInfo))))
            {
                if (!metadata.HideSurroundingHtml)
                {
                    // follow the bootstrap CSS
                    stringBuilder.Append("<div class=\"form-group\">");
                    var displayName = metadata.GetDisplayName();
                    if (!string.IsNullOrEmpty(displayName))
                    {
                        // follow the bootstrap CSS
                        stringBuilder.AppendFormat((IFormatProvider)CultureInfo.InvariantCulture, "<label class=\"form-group\">{0}</label>", new object[1]
                        {
                            (object)displayName
                        });
                        stringBuilder.AppendLine();
                    }
                }
                stringBuilder.Append(templateHelper(html, metadata, metadata.PropertyName, (string)null, DataBoundControlMode.ReadOnly, (object)null));
                if (!metadata.HideSurroundingHtml)
                {
                    stringBuilder.AppendLine("</div>");
                }
            }
            return(stringBuilder.ToString());
        }
        internal static string CollectionTemplate(HtmlHelper html, AngularTemplateHelpers.TemplateHelperDelegate templateHelper)
        {
            var model = html.ViewContext.ViewData.ModelMetadata.Model;

            if (model == null)
            {
                return(string.Empty);
            }
            var enumerable = model as IEnumerable;

            if (enumerable == null)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Templates_TypeMustImplementIEnumerable", new object[1]
                {
                    model.GetType().FullName
                }));
            }
            else
            {
                var type             = typeof(string);
                var genericInterface = TypeHelpers.ExtractGenericInterface(enumerable.GetType(), typeof(IEnumerable <>));
                if (genericInterface != null)
                {
                    type = genericInterface.GetGenericArguments()[0];
                }
                var flag            = TypeHelpers.IsNullableValueType(type);
                var htmlFieldPrefix = html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix;
                try {
                    html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = string.Empty;
                    var str1          = htmlFieldPrefix;
                    var stringBuilder = new StringBuilder();
                    var num           = 0;
                    var enumerator    = enumerable.GetEnumerator();
                    try {
                        while (enumerator.MoveNext())
                        {
                            var item      = enumerator.Current;
                            var modelType = type;
                            if (item != null && !flag)
                            {
                                modelType = item.GetType();
                            }
                            var metadataForType = ModelMetadataProviders.Current.GetMetadataForType(() => item, modelType);
                            var htmlFieldName   = string.Format(CultureInfo.InvariantCulture, "{0}[{1}]", new object[2]
                            {
                                str1,
                                num++
                            });
                            var str2 = templateHelper(html, metadataForType, htmlFieldName, null, DataBoundControlMode.Edit, null);
                            stringBuilder.Append(str2);
                        }
                    } finally {
                        var disposable = enumerator as IDisposable;
                        if (disposable != null)
                        {
                            disposable.Dispose();
                        }
                    }
                    return(stringBuilder.ToString());
                } finally {
                    html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = htmlFieldPrefix;
                }
            }
        }