Example #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((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;
                }
            }
        }
Example #2
0
        public static TryGetValueDelegate CreateTryGetValueDelegate(Type targetType)
        {
            TypeHelpers._tryGetValueDelegateCacheLock.EnterReadLock();
            TryGetValueDelegate getValueDelegate;

            try {
                if (TypeHelpers._tryGetValueDelegateCache.TryGetValue(targetType, out getValueDelegate))
                {
                    return(getValueDelegate);
                }
            } finally {
                TypeHelpers._tryGetValueDelegateCacheLock.ExitReadLock();
            }
            Type genericInterface = TypeHelpers.ExtractGenericInterface(targetType, typeof(IDictionary <,>));

            if (genericInterface != (Type)null)
            {
                Type[] genericArguments = genericInterface.GetGenericArguments();
                Type   type1            = genericArguments[0];
                Type   type2            = genericArguments[1];
                if (type1.IsAssignableFrom(typeof(string)))
                {
                    getValueDelegate = (TryGetValueDelegate)Delegate.CreateDelegate(typeof(TryGetValueDelegate), TypeHelpers._strongTryGetValueImplInfo.MakeGenericMethod(type1, type2));
                }
            }
            if (getValueDelegate == null && typeof(IDictionary).IsAssignableFrom(targetType))
            {
                getValueDelegate = new TryGetValueDelegate(TypeHelpers.TryGetValueFromNonGenericDictionary);
            }
            TypeHelpers._tryGetValueDelegateCacheLock.EnterWriteLock();
            try {
                TypeHelpers._tryGetValueDelegateCache[targetType] = getValueDelegate;
            } finally {
                TypeHelpers._tryGetValueDelegateCacheLock.ExitWriteLock();
            }
            return(getValueDelegate);
        }
        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;
                }
            }
        }