{"record":{"id":"3a373b7e43ff9e1f","repo":"dotnet/aspnetcore","slug":"component-parameters-may-only-be-added-immediately","errorCode":null,"errorMessage":"Component parameters may only be added immediately after frames of type Component","messagePattern":"Component parameters may only be added immediately after frames of type Component","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Components/Components/src/Rendering/RenderTreeBuilder.cs","lineNumber":732,"sourceCode":"    {\n        var indexOfEntryBeingClosed = _openElementIndices.Pop();\n        _entries.Buffer[indexOfEntryBeingClosed].RegionSubtreeLengthField = _entries.Count - indexOfEntryBeingClosed;\n    }\n\n    private void AssertCanAddAttribute()\n    {\n        if (_lastNonAttributeFrameType != RenderTreeFrameType.Element\n            && _lastNonAttributeFrameType != RenderTreeFrameType.Component)\n        {\n            throw new InvalidOperationException($\"Attributes may only be added immediately after frames of type {RenderTreeFrameType.Element} or {RenderTreeFrameType.Component}\");\n        }\n    }\n\n    private void AssertCanAddComponentParameter()\n    {\n        if (_lastNonAttributeFrameType != RenderTreeFrameType.Component)\n        {\n            throw new InvalidOperationException($\"Component parameters may only be added immediately after frames of type {RenderTreeFrameType.Component}\");\n        }\n    }\n\n    private int? GetCurrentParentFrameIndex()\n        => _openElementIndices.Count == 0 ? (int?)null : _openElementIndices.Peek();\n\n    private RenderTreeFrameType? GetCurrentParentFrameType()\n    {\n        var parentIndex = GetCurrentParentFrameIndex();\n        return parentIndex.HasValue\n            ? _entries.Buffer[parentIndex.Value].FrameTypeField\n            : (RenderTreeFrameType?)null;\n    }\n\n    /// <summary>\n    /// Clears the builder.\n    /// </summary>\n    public void Clear()","sourceCodeStart":714,"sourceCodeEnd":750,"githubUrl":"https://github.com/dotnet/aspnetcore/blob/294cab2f9b2e03af6b953820c7ab497c3c8b7ad9/src/Components/Components/src/Rendering/RenderTreeBuilder.cs#L714-L750","documentation":"Thrown by the private AssertCanAddComponentParameter guard invoked by AddComponentParameter. Component parameters (the [Parameter] values passed to a child component) may only be added immediately after a Component frame — _lastNonAttributeFrameType must be Component. Passing a parameter to an element, text, region, etc. is invalid.","triggerScenarios":"Calling builder.AddComponentParameter(seq, name, value) when the last non-attribute frame is not a Component — e.g., after OpenElement, AddContent, OpenRegion, or at the start. In .razor, a component parameter placed on an HTML element or after content.","commonSituations":"Mixing up AddAttribute (for elements) and AddComponentParameter (for components); a parameter emitted after a text/region frame; generated code that adds parameters without an OpenComponent.","solutions":["Ensure AddComponentParameter is called only right after OpenComponent(...) and before CloseComponent().","Use AddAttribute (not AddComponentParameter) when setting HTML element attributes.","Reorder so no content/region/text frame intervenes between OpenComponent and the parameters."],"exampleFix":"// before\nbuilder.OpenElement(0, \"div\");\nbuilder.AddComponentParameter(1, \"Value\", 42);\nbuilder.CloseElement();\n\n// after\nbuilder.OpenComponent<MyComp>(0);\nbuilder.AddComponentParameter(1, \"Value\", 42);\nbuilder.CloseComponent();","handlingStrategy":"validation","validationCode":"// AddComponentParameter only after OpenComponent; use AddAttribute for elements.\nvoid Render(RenderTreeBuilder b) {\n    b.OpenComponent<MyComp>(0);\n    b.AddComponentParameter(1, nameof(MyComp.Value), 42); // ok: parent is Component\n    b.CloseComponent();\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use AddComponentParameter for [Parameter]s and AddAttribute for DOM attributes — do not mix them up.","Place all component parameters right after OpenComponent, before CloseComponent and before any nested content.","Let the .razor compiler emit these rather than calling AddComponentParameter by hand."],"tags":["blazor","rendering","rendertree","component-parameters","manual-renderfragment"],"analyzedSha":"294cab2f9b2e03af6b953820c7ab497c3c8b7ad9","analyzedAt":"2026-08-06T20:08:02.189Z","schemaVersion":2},"datasetVersion":"2026-08-06T23:17:07.152Z"}