From 2e8bb07dfceafc897355e5453a2c80401fdacd58 Mon Sep 17 00:00:00 2001 From: jacalvar Date: Sun, 27 Mar 2016 18:26:57 -0700 Subject: [PATCH] [Fixes #4317] UrlResolutionTagHelper doesn't work with TagHelpers that run before and supress output --- .../TagHelpers/UrlResolutionTagHelper.cs | 5 ++++ .../TagHelpers/UrlResolutionTagHelperTest.cs | 29 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/Microsoft.AspNetCore.Mvc.Razor/TagHelpers/UrlResolutionTagHelper.cs b/src/Microsoft.AspNetCore.Mvc.Razor/TagHelpers/UrlResolutionTagHelper.cs index 880438f107..956d5cb0fa 100644 --- a/src/Microsoft.AspNetCore.Mvc.Razor/TagHelpers/UrlResolutionTagHelper.cs +++ b/src/Microsoft.AspNetCore.Mvc.Razor/TagHelpers/UrlResolutionTagHelper.cs @@ -125,6 +125,11 @@ public override void Process(TagHelperContext context, TagHelperOutput output) throw new ArgumentNullException(nameof(output)); } + if (output.TagName == null) + { + return; + } + string[] attributeNames; if (ElementAttributeLookups.TryGetValue(output.TagName, out attributeNames)) { diff --git a/test/Microsoft.AspNetCore.Mvc.Razor.Test/TagHelpers/UrlResolutionTagHelperTest.cs b/test/Microsoft.AspNetCore.Mvc.Razor.Test/TagHelpers/UrlResolutionTagHelperTest.cs index 669dab0cd3..0e2e10d047 100644 --- a/test/Microsoft.AspNetCore.Mvc.Razor.Test/TagHelpers/UrlResolutionTagHelperTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Razor.Test/TagHelpers/UrlResolutionTagHelperTest.cs @@ -36,6 +36,35 @@ public static TheoryData ResolvableUrlData } } + [Fact] + public void Process_DoesNothingIfTagNameIsNull() + { + // Arrange + var tagHelperOutput = new TagHelperOutput( + tagName: null, + attributes: new TagHelperAttributeList + { + { "href", "~/home/index.html" } + }, + getChildContentAsync: (useCachedResult, encoder) => Task.FromResult(null)); + + var tagHelper = new UrlResolutionTagHelper(Mock.Of(), new HtmlTestEncoder()); + var context = new TagHelperContext( + allAttributes: new TagHelperAttributeList( + Enumerable.Empty()), + items: new Dictionary(), + uniqueId: "test"); + + // Act + tagHelper.Process(context, tagHelperOutput); + + // Assert + var attribute = Assert.Single(tagHelperOutput.Attributes); + Assert.Equal("href", attribute.Name, StringComparer.Ordinal); + var attributeValue = Assert.IsType(attribute.Value); + Assert.Equal("~/home/index.html", attributeValue, StringComparer.Ordinal); + } + [Theory] [MemberData(nameof(ResolvableUrlData))] public void Process_ResolvesTildeSlashValues(string url, string expectedHref)