// A variant of TemplateRenderer.GetViewNames(). Main change relates to bool? handling. private static IEnumerable <string> GetInputTypeHints(ModelExplorer modelExplorer) { var inputTypeHints = new string[] { modelExplorer.Metadata.TemplateHint, modelExplorer.Metadata.DataTypeName, }; foreach (string inputTypeHint in inputTypeHints.Where(s => !string.IsNullOrEmpty(s))) { yield return(inputTypeHint); } // In most cases, we don't want to search for Nullable<T>. We want to search for T, which should handle // both T and Nullable<T>. However we special-case bool? to avoid turning an <input/> into a <select/>. var fieldType = modelExplorer.ModelType; if (typeof(bool?) != fieldType) { fieldType = modelExplorer.Metadata.UnderlyingOrModelType; } foreach (string typeName in TemplateRenderer.GetTypeNames(modelExplorer.Metadata, fieldType)) { yield return(typeName); } }
/// <summary> /// 入力するデータの型のヒントリストを取得する /// 基本的に「InputTagHelper」の実装をそのまま利用している /// </summary> /// <returns>バインドしているデータ型のヒントリスト</returns> protected IEnumerable <string> GetInputValueTypeHints() { var modelExplorer = For.ModelExplorer; // テンプレートヒントが有ればそれをリストにして返す if (!string.IsNullOrEmpty(modelExplorer.Metadata.TemplateHint)) { yield return(modelExplorer.Metadata.TemplateHint); } // データタイプ名が有ればそれをそれをリストにして返す if (!string.IsNullOrEmpty(modelExplorer.Metadata.DataTypeName)) { yield return(modelExplorer.Metadata.DataTypeName); } // In most cases, we don't want to search for Nullable<T>. We want to search for T, which should handle // both T and Nullable<T>. However we special-case bool? to avoid turning an <input/> into a <select/>. var fieldType = modelExplorer.ModelType; if (typeof(bool?) != fieldType) { fieldType = modelExplorer.Metadata.UnderlyingOrModelType; } foreach (var typeName in TemplateRenderer.GetTypeNames(modelExplorer.Metadata, fieldType)) { yield return(typeName); } }
public void GetTemplateNames_WithNoRegression(Type fieldType) { // Arrange var metadata = _metadataProvider.GetMetadataForType(fieldType); var expected = TemplateRenderer.GetTypeNames(metadata, metadata.UnderlyingOrModelType); // Act var actual = _templateNameSource.GetTemplateNames(metadata); // Assert actual.Should().BeEquivalentTo(expected, cfg => cfg.WithStrictOrdering()); }
public void GetTypeNames_ReturnsExpectedResults(Type fieldType, string[] expectedResult) { // Arrange var metadataProvider = new TestModelMetadataProvider(); var metadata = metadataProvider.GetMetadataForType(fieldType); // Act var typeNames = TemplateRenderer.GetTypeNames(metadata, fieldType); // Assert var collectionAssertions = expectedResult.Select <string, Action <string> >(expected => actual => Assert.Equal(expected, actual)); Assert.Collection(typeNames, collectionAssertions.ToArray()); }
/// <summary> /// Gets the input type hints. /// </summary> /// <param name="modelExplorer">The model explorer.</param> /// <returns></returns> protected static IEnumerable <string> GetInputTypeHints(ModelExplorer modelExplorer) { if (!string.IsNullOrEmpty(modelExplorer.Metadata.TemplateHint)) { yield return(modelExplorer.Metadata.TemplateHint); } if (!string.IsNullOrEmpty(modelExplorer.Metadata.DataTypeName)) { yield return(modelExplorer.Metadata.DataTypeName); } var fieldType = modelExplorer.ModelType; if (typeof(bool?) != fieldType) { fieldType = modelExplorer.Metadata.UnderlyingOrModelType; } foreach (var typeName in TemplateRenderer.GetTypeNames(modelExplorer.Metadata, fieldType)) { yield return(typeName); } }