---
title: SAIF.Presentation.Web.Controls.V2 operations and processes
summary: Business and technical operations supported by this library.
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 operations and processes

This page is the operation catalog and cross-operation hub for this library. Each operation's detailed, step-by-step logic lives in its own page under `operations/`. Operations here are control-level rendering and behavior processes; no operation performs data access, and none delegates to another repository library except where noted.

## Operation catalog
| Operation | Intent | Trigger | Inputs | Outputs | Rules |
| --- | --- | --- | --- | --- | --- |
| [Render the site banner](operations/render-site-banner.md) | 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. | `PrintPageTitle`, `ShowInternalDisplayBanner`, `DisplayBannerLogout`, resolved `/Resources/SiteBanner.xml` content. | HTML banner markup (print and/or display banner) written to the response output stream. | [BR-V2-001](business-rules.md#br-v2-001-banner-defaults-require-non-design-mode), [BR-V2-004](business-rules.md#br-v2-004-banner-markup-is-xml-driven), [BR-V2-007](business-rules.md#br-v2-007-display-banner-suppressed-when-internal-visibility-is-off) |
| [Establish banner defaults](operations/establish-banner-defaults.md) | Establish the environment-driven defaults that the render step depends on. | Called from `OnInit` when the `BannerControl` is not in design mode. | `AppGlobal.EnvironmentService.IsClientExternal`, the current `HttpContext`, the template source directory. | Internal/insider flag, default link visibility flags, resolved banner path, `LoggingIn` flag. | [BR-V2-015](business-rules.md#br-v2-015-insider-status-is-the-negation-of-isclientexternal), [BR-V2-017](business-rules.md#br-v2-017-banner-definition-resolved-from-a-fixed-site-path) |
| [Resolve internal banner visibility](operations/resolve-internal-banner-visibility.md) | Centralize the internal/external visibility decision for the display banner. | Read whenever `Render` needs to decide whether to emit the display banner. | Insider/external classification, `ShowInternalBanner` `ViewState` entry. | Boolean indicating whether the display banner should render. | [BR-V2-019](business-rules.md#br-v2-019-external-clients-always-see-the-internal-banner-as-shown), [BR-V2-020](business-rules.md#br-v2-020-internal-clients-require-explicit-banner-opt-in) |
| [Render a control in read-only mode](operations/render-control-read-only-mode.md) | Swap an interactive input control for static, read-only markup while preserving posted state. | ASP.NET page lifecycle invokes `Render` on the control. | `ReadOnly` `ViewState` entry, `TextAlign`, control style/CSS attributes. | Either the interactive base control markup, or static read-only markup (image + label). | [BR-V2-021](business-rules.md#br-v2-021-readonly-persisted-per-control-in-viewstate), [BR-V2-022](business-rules.md#br-v2-022-non-read-only-controls-render-as-their-stock-base-class), [BR-V2-023](business-rules.md#br-v2-023-read-only-mode-keeps-the-real-input-off-screen), [BR-V2-024](business-rules.md#br-v2-024-read-only-checkboxes-use-static-images) |
| [Bind and render a drop-down list](operations/bind-render-dropdown-list.md) | Support enum-sourced binding and a read-only rendering mode for the drop-down. | Host page calls `DataBind`, or the ASP.NET page lifecycle invokes `Render`. | `EnumDatasource`, `MapUnderscore`, `ReadOnly`, `ValueText`, control width/style. | Populated list items on bind; interactive drop-down or read-only textbox markup on render. | [BR-V2-027](business-rules.md#br-v2-027-drop-down-can-bind-directly-to-an-enum), [BR-V2-030](business-rules.md#br-v2-030-read-only-drop-down-renders-as-a-styled-textbox), [BR-V2-036](business-rules.md#br-v2-036-selecteditemasenum-maps-text-and-enum-bidirectionally) |
| [Display a status message](operations/display-status-message.md) | Display a status/validation message with an icon selected from message-text keywords. | ASP.NET page lifecycle (`Init`, `CreateChildControls`, `RenderControl`) for a `SAIFMessage` instance. | `Text`, `DisplayImage` (`SAIFMessage.Images`). | A one-row HTML table containing a status icon and a label. | [BR-V2-037](business-rules.md#br-v2-037-messagejs-included-once-per-page), [BR-V2-042](business-rules.md#br-v2-042-error-keyword-selects-the-error-icon), [BR-V2-043](business-rules.md#br-v2-043-warning-keyword-or-unmatched-text-selects-the-warning-icon), [BR-V2-044](business-rules.md#br-v2-044-complete-keyword-or-fixed-phrase-selects-the-complete-icon) |
| [Collapse/expand a panel](operations/collapse-expand-panel.md) | Provide a collapsible, titled panel whose expand/collapse state survives postback. | Control construction, `CreateChildControls`, and postback for a `SAIFPanel` instance. | `PanelState`, hidden-field posted value. | Header, hidden state field, and content panel markup with the correct display style. | [BR-V2-047](business-rules.md#br-v2-047-every-saifpanel-carries-a-fixed-css-class-and-script), [BR-V2-048](business-rules.md#br-v2-048-panel-structure-is-fixed), [BR-V2-049](business-rules.md#br-v2-049-collapsed-state-hides-content-via-inline-style), [BR-V2-051](business-rules.md#br-v2-051-panel-state-survives-postback) |
| [Build and fill the conditions grid](operations/build-fill-conditions-grid.md) | Provide a pre-built, reusable grid panel for displaying medical-conditions-shaped data. | `CreateChildControls` on first use; `Fill` when the host page has a `CollectionBase` to display; `OnPreRender` on every render. | Caller-supplied `System.Collections.CollectionBase`. | A `SAIFPanel`-hosted, explicitly-columned `GridView` titled "Medical Conditions". | [BR-V2-052](business-rules.md#br-v2-052-conditions-grid-always-titled-and-panel-hosted), [BR-V2-053](business-rules.md#br-v2-053-grid-columns-are-never-auto-generated), [BR-V2-054](business-rules.md#br-v2-054-conditions-grid-fill-sorts-the-caller-supplied-collection) |
| [Prevent duplicate submission](operations/prevent-duplicate-submission.md) | Block a user from submitting the same form twice via rapid repeated clicks. | `OnLoad` and `Render` for a `OneClickSubmit` button instance; client click for the guard script. | `CssClass` (optional). | A submit button whose client click is guarded against duplicate submission. | [BR-V2-058](business-rules.md#br-v2-058-one-click-submit-always-guards-the-client-click), [BR-V2-059](business-rules.md#br-v2-059-duplicate-click-guard-script-registered-once-per-page), [BR-V2-060](business-rules.md#br-v2-060-default-css-class-is-normalbutton) |
| [Render the multi-select list](operations/render-multi-select-list.md) | Render a drop-down multi-select list backed by a checkbox list. | `CreateChildControls` and `DataBind` for a `MultiListControl` instance. | `IsTextEditable`, `ListDatasource`, `TextDatasource`, `WildCardItem`. | A composite textbox + arrow image button + checkbox list control. | [BR-V2-061](business-rules.md#br-v2-061-multi-select-list-composed-of-textbox-image-button-and-checkbox-list), [BR-V2-063](business-rules.md#br-v2-063-list-auto-closes-on-focus-loss), [BR-V2-064](business-rules.md#br-v2-064-multi-list-assets-ship-as-embedded-web-resources) |
| [Manage tabs](operations/manage-tabs.md) | Add, select, style, sort, and persist a collection of navigation tabs. | Host page calls `AddTab`/`InsertTab`; `CreateChildControls` for `SAIFTabBar`; postback for view-state persistence. | Tab text, client ID, div ID, selected/enabled/visible flags, access key, width, `Mode`. | An ordered tab collection, rendered tab links/bar, and selection change events. | [BR-V2-066](business-rules.md#br-v2-066-tabs-identified-by-client-id-and-content-div-id), [BR-V2-069](business-rules.md#br-v2-069-selected-tab-is-the-first-tab-with-selected-set), [BR-V2-072](business-rules.md#br-v2-072-tab-bar-styling-differs-by-mode), [BR-V2-075](business-rules.md#br-v2-075-tab-state-persisted-through-custom-view-state-methods) |
| [Control-manager enableability helpers](operations/control-manager-enableability-helpers.md) | Expose a lightweight attribute-based mechanism for excluding controls from bulk enable/disable operations. | Called by other controls in this library (for example `SAIFMessage`) and by `clsControlManager` in `SAIF.Presentation.Web.Core.Infragistics111`. | A target `Control`, an `enableable` Boolean. | The `ControlManagerEnableable` string attribute on the target control; a Boolean enableability check result. | [BR-V2-078](business-rules.md#br-v2-078-enableability-expressed-as-a-control-attribute), [BR-V2-079](business-rules.md#br-v2-079-no-attribute-means-enableable-by-default) |
| [Grid rendering and row-click wiring](operations/grid-rendering-row-click-wiring.md) | Provide a styled `GridView` with accessible markup and optional client-side row-click behavior. | Control construction, `Init`, `RowDataBound`, and `PreRender` for a `SAIFGrid` instance. | `DataKeyField`, bound data items. | Styled grid markup with an accessible header and, when configured, client-side row-click attributes. | [BR-V2-081](business-rules.md#br-v2-081-every-saifgrid-carries-the-saifgrid-css-class), [BR-V2-083](business-rules.md#br-v2-083-row-click-wiring-requires-a-populated-datakeyfield), [BR-V2-085](business-rules.md#br-v2-085-grids-with-rows-get-an-accessible-header) |
| [Set initial page focus](operations/set-initial-page-focus.md) | Set the browser focus to a named control when the page loads. | ASP.NET page lifecycle invokes `Render` on a `FocusManager` instance. | `BoundControlId`. | A registered startup script that focuses the bound control, or no output. | [BR-V2-086](business-rules.md#br-v2-086-focus-is-set-only-when-the-target-control-exists), [BR-V2-088](business-rules.md#br-v2-088-unresolvable-boundcontrolid-produces-no-output) |
| [Render the alphanumeric filter bar](operations/render-alphanumeric-filter-bar.md) | Provide an A-Z-plus-numeric filter bar that the host page can use to filter its data. | `CreateChildControls` for a `SAIFAlphaNumericLinkControl` instance; user click on a rendered link. | None (fixed A-Z + Number range). | One `SAIFLinkButton` per letter plus a `Number` link; `LinkClicked` event carrying the clicked value. | [BR-V2-089](business-rules.md#br-v2-089-alphanumeric-bar-always-renders-the-full-a-z-range), [BR-V2-091](business-rules.md#br-v2-091-clicked-character-delivered-via-linkclicked-event) |
| [Activity indicator and form disabling](operations/activity-indicator-form-disabling.md) | Provide a consistent activity-indicator and form-disabling UX across the three action/input controls. | Control initialization for `SAIFButton`, `SAIFComboBox`, and `SAIFListBox`; client click/change events. | `EnableIndicator`, `DisableFormControlsOnClick`/`DisableFormControlsOnChange`. | CSS class selection, registered client script include, client-side form-disable signal. | [BR-V2-092](business-rules.md#br-v2-092-activity-indicator-switches-to-the-indicator-css-class), [BR-V2-093](business-rules.md#br-v2-093-each-interactive-control-registers-its-own-script) |
| [Multi-line character counter](operations/multi-line-character-counter.md) | Add an optional live character counter to multi-line, length-limited textboxes. | `Init`, `CreateChildControls`, and `RenderControl` for a `SAIFTextBox` instance. | `TextMode`, `MaxLength`, `ShowCharacterCounter`, `Visible`. | The base textbox, optionally followed by a character-counter panel and a `SaifMaxLength` attribute. | [BR-V2-096](business-rules.md#br-v2-096-character-counter-requires-multi-line-positive-maxlength-and-opt-in), [BR-V2-097](business-rules.md#br-v2-097-maximum-length-published-as-a-client-attribute) |
| [Hover help](operations/hover-help.md) | Render a hover-triggered help icon with a positioned pop-up panel. | Control initialization and rendering for a `SAIFHoverHelp` instance. | `HelpText`, `PanelWidth`, `PopupPosition`. | A help icon and a positioned pop-up panel containing `HelpText`. | [BR-V2-100](business-rules.md#br-v2-100-hover-help-uses-a-fixed-css-class-and-script), [BR-V2-101](business-rules.md#br-v2-101-default-help-icon-is-a-fixed-image) |

## Process flow diagram
The following diagram visualizes how a page-hosted control set typically renders: layout/navigation controls establish structure, data-entry and display controls render within them, and feedback controls surface the result.

```mermaid
flowchart TD
	Start([Page Init/Load]) --> Chrome[Render banner / panel / tab navigation]
	Chrome --> Entry[Render data-entry and display controls]
	Entry --> Action{User action?}
	Action -->|Submit| Guard[OneClickSubmit / activity indicator guard]
	Action -->|Filter/select| Nav[SAIFAlphaNumericLinkControl / SAIFTabs event]
	Guard --> Postback([Postback])
	Nav --> Postback
	Postback --> Feedback[Render SAIFMessage status]
```

## Failure and edge-case behavior
- `ConditionsGrid.CreateChildControls`/`Fill` swallow exceptions silently ([BR-V2-057](business-rules.md#br-v2-057-construction-and-fill-failures-are-swallowed-silently)).
- `SAIFMessage.RenderControl` writes the exception message, source, and stack trace into the rendered page if rendering fails.
- `SAIFDropDownList.Render` retries once with the selection cleared if the base render throws ([BR-V2-035](business-rules.md#br-v2-035-base-render-failure-triggers-one-retry-with-selection-cleared)).
- `FocusManager.Render` and `BannerControl.Render` both render nothing rather than raising an error when their target is unresolvable ([BR-V2-088](business-rules.md#br-v2-088-unresolvable-boundcontrolid-produces-no-output), [BR-V2-003](business-rules.md#br-v2-003-missing-banner-definition-suppresses-all-rendering)).

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.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/SAIFCheckBox.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIFDropDownList.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIFMessage.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIFPanel.vb`
- `SAIF.Presentation.Web.Controls.V2/ConditionsGrid.vb`
- `SAIF.Presentation.Web.Controls.V2/OneClickSubmitControl.vb`
- `SAIF.Presentation.Web.Controls.V2/MultiListControl.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIFTabs.vb`
- `SAIF.Presentation.Web.Controls.V2/mdlUtilities.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIFGrid.vb`
- `SAIF.Presentation.Web.Controls.V2/FocusManager.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIFAlphaNumericLinkControl.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIFButton.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIFTextBox.vb`
- `SAIF.Presentation.Web.Controls.V2/SAIFHoverHelp.vb`
