{"record":{"id":"d17c1af4f5e980d1","repo":"dotnet/aspnetcore","slug":"the-parameter-nameof-name-for-component-nam","errorCode":null,"errorMessage":"The parameter '{nameof(Name)}' for component '{nameof(CascadingValue<TValue>)}' does not allow null or empty values.","messagePattern":"The parameter '(.+?)' for component '(.+?)' does not allow null or empty values\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Components/Components/src/CascadingValue.cs","lineNumber":81,"sourceCode":"        IsFixed = false;\n\n        foreach (var parameter in parameters)\n        {\n            if (parameter.Name.Equals(nameof(Value), StringComparison.OrdinalIgnoreCase))\n            {\n                Value = (TValue)parameter.Value;\n                hasSuppliedValue = true;\n            }\n            else if (parameter.Name.Equals(nameof(ChildContent), StringComparison.OrdinalIgnoreCase))\n            {\n                ChildContent = (RenderFragment)parameter.Value;\n            }\n            else if (parameter.Name.Equals(nameof(Name), StringComparison.OrdinalIgnoreCase))\n            {\n                Name = (string)parameter.Value;\n                if (string.IsNullOrEmpty(Name))\n                {\n                    throw new ArgumentException($\"The parameter '{nameof(Name)}' for component '{nameof(CascadingValue<TValue>)}' does not allow null or empty values.\");\n                }\n            }\n            else if (parameter.Name.Equals(nameof(IsFixed), StringComparison.OrdinalIgnoreCase))\n            {\n                IsFixed = (bool)parameter.Value;\n            }\n            else\n            {\n                throw new ArgumentException($\"The component '{nameof(CascadingValue<TValue>)}' does not accept a parameter with the name '{parameter.Name}'.\");\n            }\n        }\n\n        if (_hasSetParametersPreviously && IsFixed != previousFixed)\n        {\n            throw new InvalidOperationException($\"The value of {nameof(IsFixed)} cannot be changed dynamically.\");\n        }\n\n        _hasSetParametersPreviously = true;","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/dotnet/aspnetcore/blob/3600ca084e9c8b5f4174fc5e747f4c52d2100806/src/Components/Components/src/CascadingValue.cs#L63-L99","documentation":"Thrown by CascadingValue when the Name parameter is supplied with null or an empty string. A non-empty Name is required when supplying a named cascading value so that consumers can match it via a [CascadingParameter(Name = ...)]. The check runs during parameter setting, surfacing the misuse immediately.","triggerScenarios":"Authoring <CascadingValue Name=\"\"> or passing a runtime value that resolves to null/empty for the Name parameter, while still attempting to provide a named cascade.","commonSituations":"Binding Name to a model property that is sometimes null; refactoring that leaves Name=\"\"; copy-paste from a tutorial where the name was a placeholder.","solutions":["Provide a non-empty, stable Name on the CascadingValue component (e.g. Name=\"theme\").","If the value is anonymous/unnamed, omit the Name attribute entirely (unnamed cascade).","If Name is data-driven, guard the markup so <CascadingValue Name=...> only renders when the name is non-empty."],"exampleFix":"<!-- before: empty name -->\n<CascadingValue Name=\"\" Value=\"dark\">\n    <ThemedComponent />\n</CascadingValue>\n\n<!-- after: real name -->\n<CascadingValue Name=\"theme\" Value=\"dark\">\n    <ThemedComponent />\n</CascadingValue>","handlingStrategy":"validation","validationCode":"if (string.IsNullOrEmpty(name)) { throw new ArgumentException(\"CascadingValue.Name must be non-empty.\", nameof(name)); }","typeGuard":"static bool IsValidCascadingName(string? name) => !string.IsNullOrEmpty(name);","tryCatchPattern":null,"preventionTips":["Use a constant for the cascading value name to avoid typos and empties.","Omit Name for anonymous cascades instead of passing an empty string.","Guard data-driven Name values in the markup before rendering <CascadingValue>."],"tags":["blazor","aspnetcore","cascading-parameters","components","validation"],"backgroundTag":null,"analyzedSha":"3600ca084e9c8b5f4174fc5e747f4c52d2100806","analyzedAt":"2026-08-11T16:32:30.678Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}