Fix ScriptTagHelper regression with importmap scripts containing explicit content #63155
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The ScriptTagHelper was incorrectly suppressing
<script type="importmap">
tags that contained explicit user-provided content, causing them to render as nothing in ASP.NET Core 9.0.Problem
When users wrote importmap scripts with explicit content like:
The ScriptTagHelper would completely suppress the output instead of preserving the user's content. This regression broke existing applications that relied on explicit importmap definitions.
Root Cause
The tag helper was being overly aggressive - it processed all script tags with
type="importmap"
and when noImportMapDefinition
was found in endpoint metadata, it would calloutput.SuppressOutput()
regardless of whether the user intended to use the automatic importmap feature.Solution
Modified the ScriptTagHelper to only suppress output when there's clear intent to use the automatic importmap functionality:
asp-importmap
attribute is present but no definition is found → suppress output (existing behavior preserved)ImportMap
property is explicitly set but null → suppress output (existing behavior preserved)This allows users to continue using explicit importmap content while preserving all existing functionality for automatic importmap generation.
Testing
Added comprehensive tests to verify:
asp-importmap
attribute is usedasp-importmap
is used but no definition existsFixes #58973.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.