---
title: SAIF.Presentation.Web.Controls.V2 architecture
summary: Architectural responsibilities, boundaries, and interaction patterns.
status: draft
owner: SAIF Documentation Team
last_reviewed: 2026-08-17
library: SAIF.Presentation.Web.Controls.V2
reference_type: package
---

# SAIF.Presentation.Web.Controls.V2 architecture

This library is a presentation-tier ASP.NET WebForms custom-control library. It contains only `System.Web.UI.Control`/`WebControl` subclasses (and their supporting models/enums/designers) that are compiled directly into the `SAIF.BOF.Presentation.Web.Infragistics103` package assembly for reuse across SAIF WebForms applications. It performs no database access, no WCF/service calls, and no business-rule evaluation — its sole responsibility is rendering HTML/JavaScript UI chrome and input widgets for consuming pages.

## Responsibilities
- Provide thin subclasses of standard WebForms input controls (`SAIFCheckBox`, `SAIFCheckBoxList`, `SAIFRadioButton`, `SAIFRadioButtonList`, `SAIFDropDownList`, `SAIFTextBox`, `SAIFComboBox`, `SAIFListBox`, `SAIFButton`) that add a consistent `[ReadOnly]` image-based rendering convention, AJAX "busy indicator" wiring, or minor UX behavior (character counters, enum binding) on top of their base controls.
- Provide composite layout/chrome controls (`SAIFPanel`, `SAIFTabBar`, `SAIFTabs`, `ConditionsGrid`, `SAIFGrid`) that manage child-control trees, collapsible state, and tab-selection state, persisted via `ViewState`.
- Render site-wide chrome (`BannerControl`, `BannerControlV2`) by reading an external XML resource file (`SITEBANNER.XML`/`SITEBANNERV2.XML`) at runtime, varying banner content and links by internal-vs-external client context and by whether the current page is the login screen.
- Supply narrowly scoped, cross-cutting UX helpers: client-side auto-focus scripting (`FocusManager`), control-enable-state attribute tagging (`Utilities.mdlUtilities`), duplicate-submit prevention (`OneClickSubmit`), status-message iconography (`SAIFMessage`), and an alphabet index bar (`SAIFAlphaNumericLinkControl`/`SAIFLinkButton`).
- Present a UI-only, non-business-rule column layout for medical-condition data via `ConditionsGrid` (`ClaimDecision`, `DecisionDate`, `MedicalConditionDescr`, `MedicallyStationaryDate`)*.

## Component boundaries
- **Input-control wrappers**: `SAIFCheckBox`, `SAIFCheckBoxList`, `SAIFRadioButton`, `SAIFRadioButtonList`, `SAIFDropDownList`, `SAIFTextBox`, `SAIFComboBox`, `SAIFListBox`, `SAIFButton` — each derives from the corresponding native `System.Web.UI.WebControls` control and overrides `Render`/property accessors only; no shared base class or cross-control coupling among them.
- **Layout/chrome controls**: `SAIFPanel` (+ `SAIFPanelDesigner`, `PanelState`), `SAIFTabBar` (+ `SAIFTabBarTab`, `SAIFTabBarTabCollection`, `Sorter(Of T)`, `SortOrder`, `TabBarMode`), `SAIFTabs` (+ `SAIFTabsDesigner`, `TabSettings`, `SAIFTabEventArgs`), `ConditionsGrid`, `SAIFGrid` — own composite child-control trees and `ViewState`-backed UI state; two structurally independent tab implementations coexist here (declarative `SAIFTabBar` vs. imperative `SAIFTabs`)*.
- **Site-wide chrome**: `BannerControl`, `BannerControlV2` — the only controls in this library that read an external file resource (`SITEBANNER.XML`/`SITEBANNERV2.XML`, resolved via `HttpContext.Current.Server.MapPath`) and branch on the shared `SAIF.Framework` `AppGlobal.EnvironmentService` environment context.
- **Cross-cutting helpers**: `FocusManager`, `Utilities.mdlUtilities`, `OneClickSubmit`, `SAIFMessage`, `SAIFAlphaNumericLinkControl`/`SAIFLinkButton`/`AlphaNumericCharacter` — small, self-contained utilities with no dependencies on the other component groups.
- No `.aspx`/`.ascx` markup exists in this project; all boundaries above are compiled `.vb` server controls only.

## Interaction model
- Consuming SAIF WebForms pages declare/instantiate controls from any of the four component groups directly on their pages/master pages; the groups do not call into one another (except that all controls share the standard `System.Web.UI.Control` lifecycle and `ViewState`).
- All controls follow the standard WebForms lifecycle (`Init` → `CreateChildControls`/`DataBind` → `PreRender` → `Render`), persisting state through `ViewState` (e.g., `SAIFCheckBox.[ReadOnly]`, `SAIFPanel.PanelState`, `SAIFTabBar.Tabs`) rather than any backing store.
- Postback interaction (tab clicks, banner logout, checkbox/radio selection changes) is handled through standard ASP.NET control events (`LinkButton.Click`, `CheckBoxList.SelectedIndexChanged`); no custom `IPostBackEventHandler` implementation was found**.
- `BannerControl`/`BannerControlV2` are the only controls that reach outside the control tree: they read `SITEBANNER.XML`/`SITEBANNERV2.XML` from disk and query `SAIF.Framework`'s `AppGlobal.EnvironmentService.IsClientExternal` to decide internal-vs-external rendering.
- `MultiListControl` additionally branches its client-side layout on `Page.Request.Browser.Browser.ToUpper = "FIREFOX"`, a legacy browser-sniffing pattern*.
- Several controls (`SAIFButton`, `SAIFComboBox`, `SAIFListBox`) inject client-side JavaScript for an AJAX "busy indicator"; the referenced `.js` files (e.g. `Button.js`, `ComboBox.js`) are not present in this project and their exact client behavior could not be verified from this library's source**.

## Architecture diagram
The following diagram shows how consuming pages compose controls from the four component groups, and how the banner controls are the only ones reading an external XML resource and the shared `AppGlobal` environment service.

```mermaid
flowchart TD
	A[Consuming SAIF WebForms page] --> B[Input-control wrappers<br>SAIFCheckBox / SAIFRadioButton / SAIFDropDownList / SAIFTextBox / SAIFComboBox / SAIFListBox / SAIFButton]
	A --> C[Layout/chrome controls<br>SAIFPanel / SAIFTabBar / SAIFTabs / SAIFGrid / ConditionsGrid]
	A --> D[Site chrome<br>BannerControl / BannerControlV2]
	A --> E[Cross-cutting helpers<br>FocusManager / OneClickSubmit / SAIFMessage / SAIFAlphaNumericLinkControl / mdlUtilities]
	D --> F[SITEBANNER.XML / SITEBANNERV2.XML resource file]
	D --> G[SAIF.Framework AppGlobal.EnvironmentService]
	C --> H[ViewState]
	B --> H
```

## Sequence diagram
The following diagram shows the primary banner-rendering and logout sequence for `BannerControl`/`BannerControlV2`.

```mermaid
sequenceDiagram
	participant Page as Consuming page
	participant Banner as BannerControl/BannerControlV2
	participant Env as AppGlobal.EnvironmentService
	participant XML as SITEBANNER(V2).XML
	Page->>Banner: OnInit (render pipeline)
	Banner->>Env: IsClientExternal
	Env-->>Banner: internal/external flag
	Banner->>Banner: SetBannerControlDefaults()
	Banner->>XML: Load banner XML via Server.MapPath
	XML-->>Banner: print/display nodes
	Banner-->>Page: Rendered banner HTML
	Page->>Banner: Logout LinkButton click (postback)
	Banner->>Banner: FeedbackHelpLogout_Click (Session.Abandon, clear cookies)
	Banner-->>Page: Redirect to /OnlineLogin/loginscreen.aspx
```

## Design constraints
- The project has no `<ProjectReference>` elements; all SAIF ecosystem dependencies (`SAIF.Framework`, `SAIF.Framework.Security`, `SAIF.Framework.Common`, `SAIF.Framework.Preferences`, `SAIF.HashUtil`) are resolved as compiled NuGet package references, not source project references.
- This project's `.vb` sources are not compiled into their own standalone assembly; the `.nuspec` bundles them into `src\presentation\saif.presentation.web.controls.v2`, and the package's shipped binary (`lib\net45`) is built from the `SAIF.Presentation.Web.Core.Infragistics103` project's output DLL*.
- No third-party UI toolkit packages (e.g., Infragistics, AJAX Control Toolkit) are referenced from this project's `.vbproj`, despite the sibling repository-root `.nuspec` bundling an `AjaxControlToolkit.dll` binary into the overall package*.
- Target framework is .NET Framework 4.6.1; controls rely entirely on `ViewState` for state persistence, with no configuration-driven behavior (no `ConfigurationManager`/`AppSettings` reads were found).
- `BannerControl`/`BannerControlV2` behavior is environment-conditional on `AppGlobal.EnvironmentService.IsClientExternal` and on the current virtual directory equaling `"ONLINELOGIN"` — this is the only environment-conditional logic in the library.
- Two structurally independent, parallel tab-bar implementations (`SAIFTabBar`/declarative vs. `SAIFTabs`/imperative) coexist without a shared base class; whether both are still actively consumed by downstream applications could not be determined from this library alone**.

> **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.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Dependencies](dependencies.md)
- [Configuration settings](configuration.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Control catalog](control-catalog.md)
- [API reference](api/index.md)

## Sources
- SAIF.Presentation.Web.Controls.V2\SAIF.Presentation.Web.Controls.V2.vbproj
- SAIF.Presentation.Web.Controls.V2\packages.config
- SAIF.Presentation.Web.Controls.V2\Banner.vb
- SAIF.Presentation.Web.Controls.V2\BannerControlV2.vb
- SAIF.Presentation.Web.Controls.V2\ConditionsGrid.vb
- SAIF.Presentation.Web.Controls.V2\FocusManager.vb
- SAIF.Presentation.Web.Controls.V2\mdlUtilities.vb
- SAIF.Presentation.Web.Controls.V2\MultiListControl.vb
- SAIF.Presentation.Web.Controls.V2\OneClickSubmitControl.vb
- SAIF.Presentation.Web.Controls.V2\SAIFAlphaNumericLinkControl.vb
- SAIF.Presentation.Web.Controls.V2\SAIFButton.vb
- SAIF.Presentation.Web.Controls.V2\SAIFCheckBox.vb
- SAIF.Presentation.Web.Controls.V2\SAIFCheckBoxList.vb
- SAIF.Presentation.Web.Controls.V2\SAIFComboBox.vb
- SAIF.Presentation.Web.Controls.V2\SAIFDropDownList.vb
- SAIF.Presentation.Web.Controls.V2\SAIFGrid.vb
- SAIF.Presentation.Web.Controls.V2\SAIFHoverHelp.vb
- SAIF.Presentation.Web.Controls.V2\SAIFListBox.vb
- SAIF.Presentation.Web.Controls.V2\SAIFMessage.vb
- SAIF.Presentation.Web.Controls.V2\SAIFPanel.vb
- SAIF.Presentation.Web.Controls.V2\SAIFRadioButton.vb
- SAIF.Presentation.Web.Controls.V2\SAIFRadioButtonList.vb
- SAIF.Presentation.Web.Controls.V2\SAIFTabBar.vb
- SAIF.Presentation.Web.Controls.V2\SAIFTabs.vb
- SAIF.Presentation.Web.Controls.V2\SAIFTabsDesigner.vb
- SAIF.Presentation.Web.Controls.V2\SAIFTextBox.vb
- SAIF.Presentation.Web.Controls.V2\TabSettings.vb
- SAIF.BOF.Presentation.Web.Infragistics103.nuspec
