{"record":{"id":"f3e508b94b83c0a1","repo":"OrchardCMS/OrchardCore","slug":"render-section-tag-requires-a-name-argument","errorCode":null,"errorMessage":"render_section tag requires a name argument","messagePattern":"render_section tag requires a name argument","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/OrchardCore/OrchardCore.DisplayManagement.Liquid/Tags/RenderSectionTag.cs","lineNumber":21,"sourceCode":"using Fluid.Ast;\nusing Microsoft.Extensions.DependencyInjection;\nusing OrchardCore.DisplayManagement.Layout;\nusing OrchardCore.Liquid;\n\nnamespace OrchardCore.DisplayManagement.Liquid.Tags;\n\npublic class RenderSectionTag\n{\n    public static async ValueTask<Completion> WriteToAsync(IReadOnlyList<FilterArgument> argumentsList, TextWriter writer, TextEncoder encoder, TemplateContext context)\n    {\n        var services = ((LiquidTemplateContext)context).Services;\n\n        var layout = await services.GetRequiredService<ILayoutAccessor>().GetLayoutAsync();\n        var displayHelper = services.GetRequiredService<IDisplayHelper>();\n\n        var arguments = new NamedExpressionList(argumentsList);\n\n        var nameExpression = arguments[\"name\", 0] ?? throw new ArgumentException(\"render_section tag requires a name argument\");\n        var name = (await nameExpression.EvaluateAsync(context)).ToStringValue();\n\n        var requiredExpression = arguments[\"required\", 1];\n        var required = requiredExpression != null && (await requiredExpression.EvaluateAsync(context)).ToBooleanValue();\n\n        var zone = layout.Zones[name];\n\n        if (zone.IsNullOrEmpty())\n        {\n            if (required)\n            {\n                throw new InvalidOperationException(\"Zone not found while invoking 'render_section': \" + name);\n            }\n\n            return Completion.Normal;\n        }\n\n        var htmlContent = await displayHelper.ShapeExecuteAsync(zone);","sourceCodeStart":3,"sourceCodeEnd":39,"githubUrl":"https://github.com/OrchardCMS/OrchardCore/blob/4306c0717fe573f6fca1b4955909ddab6a192807/src/OrchardCore/OrchardCore.DisplayManagement.Liquid/Tags/RenderSectionTag.cs#L3-L39","documentation":"The Liquid `render_section` tag needs a `name` argument identifying which layout zone to render (e.g. Navigation, Content, Footer). The name is looked up as the first positional argument or a named `name:`; when both are absent the tag throws an ArgumentException because it has no zone to resolve on the layout shape.","triggerScenarios":"`{% render_section %}` with no arguments at all, or only unrelated named arguments such as `{% render_section required:true %}` (no `name` / first positional value).","commonSituations":"Template scaffolds with the zone name left as a TODO placeholder; refactoring that removed the literal name; dynamic zone names passed as a null variable.","solutions":["Provide the zone name positionally: `{% render_section 'Footer' %}`.","Or name it explicitly: `{% render_section name:'Footer', required:false %}`.","Verify the layout shape actually defines a zone with that name (see also the 'Zone not found' error for the required case)."],"exampleFix":"// before\n{% render_section required:true %}\n// after\n{% render_section name:'Footer', required:true %}","handlingStrategy":"validation","validationCode":"{% if section_name == blank %}{% // render_section requires a name argument %}{% else %}{% render_section section_name %}{% endif %}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pass the zone name as the first positional argument or `name:'...'`.","Only use `required:true` when the zone is guaranteed to be populated.","Keep a list of valid layout zone names for template authors."],"tags":["liquid","razor-tags","missing-argument","orchardcore"],"backgroundTag":"missing-required-argument","analyzedSha":"4306c0717fe573f6fca1b4955909ddab6a192807","analyzedAt":"2026-09-13T17:41:05.024Z","contentChangedAt":"2026-09-13T17:41:05.024Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}