---
title: Render the site banner
summary: Render the SAIF site banner from XML-defined content, honoring internal/external visibility.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-08-17
library: SAIF.Presentation.Web.Controls.V2
reference_type: package
operation_id: OP-V2-001
trigger: ASP.NET page lifecycle invokes `Render` on a `BannerControl` instance hosted on a page.
---

# Render the site banner

Render the SAIF site banner from XML-defined content, honoring internal/external visibility. ASP.NET page lifecycle invokes `Render` on a `BannerControl` instance hosted on a page.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-V2-001 |
| **Trigger** | ASP.NET page lifecycle invokes `Render` on a `BannerControl` instance hosted on a page. |
| **Inputs** | `PrintPageTitle`, `ShowInternalDisplayBanner`, `DisplayBannerLogout`, resolved `/Resources/SiteBanner.xml` content. |
| **Outputs** | HTML banner markup (print and/or display banner) written to the response output stream. |
| **Primary components** | `BannerControl.Render` |
| **Entry point** | `SAIF.Presentation.Web.Controls.V2/Banner.vb` |

## Steps

1. On `OnInit`, run banner defaults setup (`OP-V2-002`) unless the control is in design mode. ([BR-V2-001](../business-rules.md#br-v2-001-banner-defaults-require-non-design-mode))
2. On `Render`, if `Context Is Nothing` (design time), emit a static placeholder `<div>` containing the `CustomerHeader` markup and stop. ([BR-V2-002](../business-rules.md#br-v2-002-design-time-banner-renders-a-static-placeholder))
3. If the resolved banner-definition path is empty, exit without rendering anything. ([BR-V2-003](../business-rules.md#br-v2-003-missing-banner-definition-suppresses-all-rendering))
4. Load the banner XML document from the resolved path into an `XmlDataDocument`. ([BR-V2-004](../business-rules.md#br-v2-004-banner-markup-is-xml-driven))
5. Select `business_online_banner/banner_body/print`; if present, substitute `[TITLE]` with `PrintPageTitle` and write the print banner. ([BR-V2-005](../business-rules.md#br-v2-005-print-banner-renders-when-a-print-node-exists), [BR-V2-006](../business-rules.md#br-v2-006-title-placeholder-substitution))
6. If `ShowInternalDisplayBanner` is false, exit before rendering the display banner. ([BR-V2-007](../business-rules.md#br-v2-007-display-banner-suppressed-when-internal-visibility-is-off))
7. Select `business_online_banner/banner_body/display`; substitute `[TITLE]` with `PrintPageTitle` and `[LINKS]` with `*`, then split the body on `*`. ([BR-V2-006](../business-rules.md#br-v2-006-title-placeholder-substitution), [BR-V2-008](../business-rules.md#br-v2-008-links-placeholder-marks-the-dynamic-link-insertion-point))
8. Write the leading body fragment, then render the `SAIF.com` link, the logout link, the feedback link, and the phone label, separating each with the XML-defined separator. ([BR-V2-009](../business-rules.md#br-v2-009-saifcom-link-renders-first), [BR-V2-010](../business-rules.md#br-v2-010-logout-link-requires-opt-in-and-non-login-application), [BR-V2-011](../business-rules.md#br-v2-011-login-application-shows-a-plain-feedback-link), [BR-V2-012](../business-rules.md#br-v2-012-feedback-opens-a-fixed-size-pop-up-outside-the-login-application), [BR-V2-013](../business-rules.md#br-v2-013-banner-elements-are-separated-by-the-xml-defined-separator))
   - If `DisplayBannerLogout` is true and `LoggingIn` is false: render the logout link.
   - If `LoggingIn` is true: render the plain XML-defined feedback link instead of the pop-up variant.
   - If `LoggingIn` is false: render the feedback link as a `window.open` call to `/BusinessOnline/BusinessOnlineFeedback.aspx` sized 641x505.
9. Append the remaining body fragments and write them to the output stream. ([BR-V2-014](../business-rules.md#br-v2-014-linkslabels-render-only-with-required-xml-attributes))

## Process flow

The following diagram visualizes this operation's control flow.

```mermaid
flowchart TD
	Start([Render invoked]) --> D1{Design time?}
	D1 -->|Yes| PH[Emit static placeholder div]
	D1 -->|No| PathCheck{Banner path resolved?}
	PathCheck -->|No| NoOut([No output])
	PathCheck -->|Yes| LoadXml[Load SiteBanner.xml]
	LoadXml --> PrintCheck{print node exists?}
	PrintCheck -->|Yes| RenderPrint[Render print banner]
	PrintCheck -->|No| InternalCheck
	RenderPrint --> InternalCheck{ShowInternalDisplayBanner?}
	InternalCheck -->|No| StopDisplay([Stop before display banner])
	InternalCheck -->|Yes| RenderDisplay[Render display banner links]
	RenderDisplay --> Done([Banner rendered])
```

## Failure and edge-case behavior

- No exceptional failure handling beyond the branches described in **Steps** was found in the analysis findings.*

## Related documentation
- [Operations and processes](../operations-processes.md)
- [Business rules](../business-rules.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with `**` could not be confirmed; treat as unknown until verified.

## Sources
- `SAIF.Presentation.Web.Controls.V2/Banner.vb`
