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

# SAIF.Presentation.Web.Controls.Infragistics111 architecture

`SAIF.Presentation.Web.Controls.Infragistics111` is a small ASP.NET WebForms server-control library that extends three Infragistics 11.1 vendor controls (`WebAsyncRefreshPanel`, `WebDateTimeEdit`, `WebMaskEdit`) with SAIF-specific presentation behavior, and adds one non-visual `Control` subclass that generates client-side JavaScript to cascade two `UltraWebGrid` drop-down value lists. It contains no business logic, no data access, and no configuration or security code.

## Responsibilities
- Adapt Infragistics 11.1 web controls to SAIF conventions: sentinel-date suppression, mask-literal suppression, and phone/tax-ID value normalization.
- Restore client-side input focus and surface a generic error redirect after a `WebAsyncRefreshPanel` asynchronous refresh (`SAIFWarp`).
- Generate client-side JavaScript that cascades a child `UltraWebGrid` column's value list from the selected value of a parent column (`clsDropDownController`).
- Emit all behavior through the standard ASP.NET WebForms control lifecycle (`Init`, `PreRender`, `CreateChildControls`, `RenderContents`, `DataBind`) and deliver it to the browser via `Page.ClientScript` script registration.

## Component boundaries
- `SAIFWarp` (extends `Infragistics.WebUI.Misc.WebAsyncRefreshPanel`): layout/async-container wrapper; owns focus-restoration and error-notification script registration.
- `SAIFWebDateTimeEdit` (extends `Infragistics.WebUI.WebDataInput.WebDateTimeEdit`): input wrapper; owns sentinel-date suppression on focus.
- `SAIFWebMaskEdit` (extends `Infragistics.WebUI.WebDataInput.WebMaskEdit`): input wrapper; owns phone/tax-ID value normalization (`PhoneValue`, `TaxIdValue`).
- `clsDropDownController` (extends `System.Web.UI.Control`): non-rendering behavior controller; owns cascade-script generation for two `UltraWebGrid` columns via its nested `ListItem` data holder.
- Each type is independent — there is no shared base class, manager, factory, or inter-type call within the library.*

## Interaction model
- A consuming `.aspx` page declares one or more of the four controls directly on the page; there is no factory or dependency-injection indirection.
- Each control participates in the page lifecycle and registers script blocks/startup scripts against `Page.ClientScript`, which the browser executes using the Infragistics 11.1 client-side API (`igedit_getById`, `igtbl_getColumnById`, `igtbl_getRowById`, `getCellFromKey`).
- `SAIFWebMaskEdit` exposes normalized values (`PhoneValue`, `TaxIdValue`) that page code-behind reads directly; there is no push-based binding framework in this library.
- Two absolute site paths are hard-coded into emitted script — `/weberror/processError.aspx` (error redirect target) and `/Resources/Images/saif_progressIndicator.gif` (progress indicator image) — so consuming applications must host these paths.*

## Architecture diagram
The following diagram shows how each control type participates in the WebForms page lifecycle and what it emits to the browser.

```mermaid
flowchart TD
	A["Consuming .aspx page"] --> B["SAIFWarp<br>(WebAsyncRefreshPanel)"]
	A --> C["SAIFWebDateTimeEdit<br>(WebDateTimeEdit)"]
	A --> D["SAIFWebMaskEdit<br>(WebMaskEdit)"]
	A --> E["clsDropDownController<br>(Control)"]
	B --> F["Page.ClientScript<br>focus + error + progress scripts"]
	C --> F
	E --> F
	E --> G["UltraGridColumn.ValueList<br>DataBind"]
	D --> H["PhoneValue / TaxIdValue<br>read by page code-behind"]
	F --> I["Browser: igedit_* / igtbl_* client API"]
```

## Sequence diagram
The following diagram shows the primary request/response sequence for the grid drop-down cascade behavior.

```mermaid
sequenceDiagram
	participant Client
	participant Page as Consuming .aspx page
	participant DDC as clsDropDownController
	participant Grid as UltraWebGrid
	Page->>DDC: DataBind()
	DDC->>DDC: Project List1/List2 to ListItem
	DDC->>Grid: Bind Column1/Column2 ValueList
	DDC->>Page: RegisterClientScriptBlock (cascade script)
	Client->>Grid: Edit parent cell
	Grid->>Client: Invoke BeforeEdit<Column2Key>
	Client-->>Grid: Rebuilt child value list
```

## Design constraints
- Version-locked to Infragistics 11.1 assemblies (`Infragistics35.*.v11.1`); behavior depends on the vendor's client-side script API.*
- `Option Strict` is `Off` and a broad `NoWarn` list is configured for this project, permitting late binding and implicit conversions (used in `clsDropDownController.DataBind`) without compiler diagnostics.
- The declared `RootNamespace` (`SAIF.Presentation.Web.Controls.V2`) does not match the assembly name (`SAIF.Presentation.Web.Controls.Infragistics111`); consuming pages must register the tag prefix against the namespace, not the assembly name.*
- Generated JavaScript is assembled via raw string concatenation with no HTML/JS encoding of data values.*
- No internal SAIF project or NuGet dependency exists at the code level; the library is a leaf presentation component (see [Dependencies](dependencies.md)).

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

> **Note:** Statements marked with `*` were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts.

## Sources
- `SAIF.Presentation.Web.Controls.Infragistics111/SAIF.Presentation.Web.Controls.Infragistics111.vbproj`
- `SAIF.Presentation.Web.Controls.Infragistics111/SAIFWarp.vb`
- `SAIF.Presentation.Web.Controls.Infragistics111/SAIFWebDateTimeEdit.vb`
- `SAIF.Presentation.Web.Controls.Infragistics111/SAIFWebMaskEdit.vb`
- `SAIF.Presentation.Web.Controls.Infragistics111/clsDropDownController.vb`
