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

# SAIF.Presentation.Web.Controls.V2 architecture

`SAIF.Presentation.Web.Controls.V2` is a single-layer ASP.NET Web Forms **server control library** supplying the second-generation ("V2") SAIF look-and-feel control set: styled input controls, layout/navigation containers, a data grid, a status-message control, and behavior helpers. Every control renders HTML and registers client-side JavaScript from the consuming application's `/Resources/` folder; the library performs no data access, configuration-file, or authorization logic of its own.

## Responsibilities
- Render SAIF-branded chrome (`BannerControl`, `BannerControlV2`) driven by an external `/Resources/SiteBanner.xml` content file.
- Provide layout and grouping controls (`SAIFPanel`, `ConditionsGrid`) and in-page navigation controls (`SAIFTabs`, `SAIFTabBar`).
- Supply styled data-entry controls (`SAIFTextBox`, `SAIFCheckBox`, `SAIFCheckBoxList`, `SAIFRadioButton`, `SAIFRadioButtonList`, `SAIFDropDownList`, `SAIFComboBox`, `SAIFListBox`, `MultiListControl`) each with an optional read-only rendering mode.
- Supply action/submission controls (`SAIFButton`, `OneClickSubmit`, `SAIFAlphaNumericLinkControl`) and a styled data grid (`SAIFGrid`).
- Supply user-feedback controls (`SAIFMessage`, `SAIFHoverHelp`, `FocusManager`) and the cross-control `Utilities.mdlUtilities` attribute helper.

## Component boundaries
- **Branding/site chrome**: `BannerControl`, `BannerControlV2` — the only controls with an environment-service dependency (`AppGlobal.EnvironmentService.IsClientExternal`) gating logout/feedback link visibility.
- **Layout and grouping**: `SAIFPanel` (+ `SAIFPanelDesigner`, `PanelState`), `ConditionsGrid`.
- **Navigation within a page**: `SAIFTabs` (+ `TabSettings`, `SAIFTabEventArgs`, `SAIFTabsDesigner`), `SAIFTabBar` (+ tab/collection/sorter types).
- **Data entry**: the styled input control set, each a thin subclass over a stock ASP.NET control that overrides `Render`/`RenderControl` and, where needed, `CreateChildControls`.
- **Action/submission**: `SAIFButton`, `OneClickSubmit`, `SAIFAlphaNumericLinkControl`.
- **Data display**: `SAIFGrid`.
- **User feedback**: `SAIFMessage`, `SAIFHoverHelp`, `FocusManager`.
- **Cross-control utility**: `Utilities.mdlUtilities`.

No type in this library inherits from a `SAIF.Framework.*` or `SAIF.BOF.Framework` base class — all inheritance is from ASP.NET Web Forms types (`WebControl`, `CompositeControl`, `Control`, `Button`, `TextBox`, `CheckBox`, `CheckBoxList`, `RadioButton`, `RadioButtonList`, `DropDownList`, `ListBox`, `GridView`, `Label`, `Panel`) and design-time types (`ControlDesigner`, `ContainerControlDesigner`).

## Interaction model
- Controls are dropped directly onto consuming application pages; there is no controller, model, or data-access layer in this library — each control renders itself and raises UI events (`LinkClicked`, `TabClicked`, row-click events) for the hosting page to handle.
- `BannerControl`/`BannerControlV2` read `/Resources/SiteBanner.xml` for banner markup, links, and labels, and call `AppGlobal.EnvironmentService.IsClientExternal` to decide whether logout/feedback links are shown.
- Client-script registration happens in `Init`/`Load`, guarded by `IsClientScriptIncludeRegistered` so pages hosting many control instances emit each script include once; scripts and images are referenced by hard-coded absolute paths under the site's `/Resources/` folder. `MultiListControl` is the exception — it ships its own JavaScript (`MultiList.js`) and image (`MultiComboArrow.gif`) as embedded `WebResource` assets.
- `SAIFMessage` (this library) is consumed by `clsObjectBindManager` in `SAIF.Presentation.Web.Binding.Infragistics111` to display aggregated validation errors, and by `AppViewMasterPageBase` in `SAIF.Presentation.Web.Core.Infragistics111` for status messaging.

## Architecture diagram
The following diagram shows the control set's relationship to its rendering and external asset touchpoints.

```mermaid
flowchart TD
	A[ASP.NET Web Forms base controls] --> B[SAIF V2 control set]
	B --> C[Rendered HTML]
	B --> D["/Resources/Scripts/*.js includes"]
	B --> E["/Resources/Images/* static assets"]
	B --> F["/Resources/SiteBanner.xml"]
	G["SAIF.Framework.Security AppGlobal.EnvironmentService"] --> H[BannerControl / BannerControlV2]
	B --> I["Embedded WebResource<br>MultiList.js + MultiComboArrow.gif"]
```

## Sequence diagram
The following diagram shows a typical read-only-mode data-entry control render.

```mermaid
sequenceDiagram
	participant Page as Consuming page
	participant Ctl as SAIF V2 control (e.g. SAIFCheckBox)
	participant Res as /Resources/*
	Page->>Ctl: Init/Load
	Ctl->>Res: Register script include (guarded, once per page)
	Page->>Ctl: RenderControl
	alt ReadOnly = True
		Ctl-->>Page: Static markup (image/disabled textbox)
	else ReadOnly = False
		Ctl-->>Page: MyBase.Render (interactive control)
	end
```

## Design constraints
- The library depends on a fixed `/Resources/` folder layout (scripts, images, `SiteBanner.xml`) in every hosting application; controls are non-functional without those assets being supplied by the consumer.*
- `AppGlobal.EnvironmentService` (owning assembly not present in this repository) is the only framework coupling, limited to the `IsClientExternal` check in the banner controls.**
- Several controls build read-only markup by concatenating `Text`, `CssClass`, `ClientID` and style values into a `StringBuilder` without HTML encoding — a cross-site-scripting risk if any value is attacker-influenced.*
- `BannerControl.Render` writes `InnerXml` from `SiteBanner.xml` directly to the response, so the banner file is effectively trusted markup.
- `SAIFMessage.RenderControl` catches exceptions and writes the message, source, and **stack trace** into the rendered page — an information-disclosure risk in production.
- Ten controls carry `AspNetHostingPermission` CAS `Demand`/`InheritanceDemand` attributes at `Minimal` level — standard boilerplate, not an application authorization mechanism.
- No database, configuration file, or authentication/authorization logic exists anywhere in this library.

> **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)
- [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/Banner.vb`
- `SAIF.Presentation.Web.Controls.V2/BannerControlV2.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIFMessage.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIFPanel.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIFTabs.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIFTabBar.vb`
- `SAIF.Presentation.Web.Controls.V2/MultiListControl.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIF.Presentation.Web.Controls.V2.vbproj`
