예제 #1
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(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;
                }
            }
        }