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

# SAIF.Presentation.Web.Controls.Infragistics103 architecture

This library is a presentation-tier WebForms control-extension set: each of its four public classes inherits directly from an Infragistics WebUI v10.3 control (or, for `clsDropDownController`, from the base ASP.NET `System.Web.UI.Control`) and adds SAIF-specific behavioral overrides — client-side script injection, sentinel-value suppression, cascading-dropdown filtering, and masked-value cleanup — without performing data access or business-object orchestration of its own. It does perform one navigation-triggering behavior: `SAIFWarp` registers a client-side error handler that, on a qualifying async-refresh error, causes the browser to navigate to `/weberror/processError.aspx?MSG={0}` (see [Business rules — BR-4](business-rules.md#br-4-async-refresh-error-redirects-to-central-error-page)).

## Responsibilities
- Wrap `Infragistics.WebUI.Misc.WebAsyncRefreshPanel` (`SAIFWarp`) to add centralized async-refresh error redirection, a progress-indicator init script, and post-refresh focus restoration for a designated child control.
- Wrap `Infragistics.WebUI.WebDataInput.WebDateTimeEdit` (`SAIFWebDateTimeEdit`) to suppress Infragistics' sentinel "null date" values (`01/01/1901`, `12/31/9999`) from being shown to the user on focus.
- Wrap `Infragistics.WebUI.WebDataInput.WebMaskEdit` (`SAIFWebMaskEdit`) to expose cleaned `PhoneValue`/`TaxIdValue` accessors that strip mask placeholders and dangling extension markers.
- Wire cascading/dependent value lists on two `UltraGridColumn` instances of an `UltraWebGrid` (`clsDropDownController`), generating client-side JavaScript that filters the second column's dropdown options based on the first column's selected value.
- Inject client-side JavaScript into the hosting ASP.NET page via `Page.ClientScript.RegisterClientScriptBlock` / `RegisterStartupScript`, guarding each registration against duplicate injection.
- The library performs no data access or business-object orchestration, and no class performs its own server-side navigation; the sole browser navigation is client-side, triggered by the `SAIFWarp` error script described above*.

## Component boundaries
- `SAIFWarp`: boundary around `WebAsyncRefreshPanel`. Owns async-refresh error handling (redirect to `/weberror/processError.aspx` on `flags > 1`), the progress-indicator init script, and a hidden `{ID}_FOCUS` field used to restore focus to a named control after an async postback.
- `clsDropDownController`: boundary around a pair of `UltraGridColumn` value lists on an `UltraWebGrid`. Owns reflection-based extraction of code/display/key values from arbitrary `List1`/`List2` data sources (via `System.ComponentModel.TypeDescriptor`) and generation of the `BeforeEdit{Column2.Key}` client-side filter function. It has no awareness of any specific business entity type, making it a generic grid-cell binder rather than a business-object-aware component*.
- `SAIFWebDateTimeEdit`: boundary around `WebDateTimeEdit`. Owns only the `onfocus` sentinel-date-suppression script.
- `SAIFWebMaskEdit`: boundary around `WebMaskEdit`. Owns only the `PhoneValue`/`TaxIdValue` read-only accessors and the `PHONE_EXT` constant.
- No shared base class, binder framework, or factory exists across these four components — each is a standalone control wrapper with its own lifecycle overrides*, unlike the "Binder" pattern used elsewhere in the SAIF presentation stack.

## Interaction model
- Consuming ASP.NET WebForms pages add these controls declaratively via their `ToolboxData` markup (e.g., `<{0}:SAIFWARP runat=server>`); there is no dependency-injection, factory, or service-locator usage.
- `SAIFWarp` and `SAIFWebDateTimeEdit` are driven entirely by the ASP.NET page lifecycle: they override `Init`/`PreRender` (and, for `SAIFWarp`, `CreateChildControls`/`RenderContents`) to register client scripts and wire `ClientSideEvents` properties (`RefreshComplete`, `Error`, `InitializePanel`). In `SAIFWarp_Init`, the `RefreshComplete` and `InitializePanel` client-side event wiring (and the `FOCUS_SCRIPT` registration) occur only when `Not DesignMode` **and** `ControlsFocus` is `True`; when `ControlsFocus` is `False`, none of that wiring runs during `Init`.
- `clsDropDownController` is driven by an explicit `DataBind()` call from a consuming page/control (typically during grid setup): it binds `Column1`/`Column2` value lists from `List1`/`List2`, uses reflection to project data-source items into internal `ListItem` DTOs, and registers a generated JavaScript block (`"DD"`) that Infragistics invokes client-side via `BeforeEnterEditModeHandler` when a Column2 cell enters edit mode.
- All JavaScript-driven behavioral effects execute in the browser: `SAIFWarp`'s error/focus scripts, `SAIFWebDateTimeEdit`'s sentinel-date suppression, and `clsDropDownController`'s cascading filter are all generated and registered server-side but enforced entirely by client-side script, including the error handler's browser-side `navigate` call to the shared error page*.
- `SAIFWebMaskEdit`'s `PhoneValue`/`TaxIdValue` are the exception to that client-side-enforcement pattern: they are plain server-side property getters read by consuming code after postback, not client-script-driven. They perform no server round trip, database interaction, or navigation of their own.

## Architecture diagram

The following diagram shows the high-level component interactions between a consuming page, this library's control wrappers, their Infragistics base classes, and the browser.

```mermaid
flowchart TD
	Page["Consuming ASP.NET page<br>(declarative markup)"] --> SAIFWarp["SAIFWarp"]
	Page --> DropDown["clsDropDownController"]
	Page --> DateEdit["SAIFWebDateTimeEdit"]
	Page --> MaskEdit["SAIFWebMaskEdit"]
	SAIFWarp --> WebAsyncRefreshPanel["Infragistics WebAsyncRefreshPanel"]
	DropDown --> UltraWebGrid["Infragistics UltraWebGrid<br>(UltraGridColumn)"]
	DateEdit --> WebDateTimeEdit["Infragistics WebDateTimeEdit"]
	MaskEdit --> WebMaskEdit["Infragistics WebMaskEdit"]
	SAIFWarp -.->|registers script| Browser["Browser client-side JS"]
	DropDown -.->|registers script| Browser
	DateEdit -.->|registers script| Browser
	Browser -.->|Error flags > 1| ErrorPage["/weberror/processError.aspx"]
```

## Sequence diagram

The following diagram shows the primary cascading-dropdown data-bind and client-side filter sequence.

```mermaid
sequenceDiagram
	participant ConsumingPage as Consuming page
	participant Controller as clsDropDownController
	participant Grid as UltraWebGrid (client)
	participant Browser
	ConsumingPage->>Controller: DataBind()
	Controller->>Controller: Bind Column1/Column2 ValueList from List1/List2 (reflection via TypeDescriptor)
	Controller->>Controller: GenerateJavaScript()
	Controller->>Browser: RegisterClientScriptBlock("DD", script)
	Browser->>Grid: User begins editing Column2 cell
	Grid->>Browser: BeforeEnterEditModeHandler fires -> BeforeEdit{Column2.Key}(gridName, cellId)
	Browser->>Browser: switch(catCell) selects filtered vListFilter
	Browser-->>Grid: col.ValueList replaced with filtered options
```

## Design constraints
- Requires ASP.NET WebForms on .NET Framework 4.6.1 and is written in VB.NET; it cannot be consumed by non-WebForms (e.g., MVC/API) hosts.
- Tightly version-coupled to Infragistics v10.3 assemblies (`Infragistics35.Web.v10.3`, `Infragistics35.WebUI.Misc.v10.3`, `Infragistics35.WebUI.Shared.v10.3`, `Infragistics35.WebUI.UltraWebGrid.v10.3`, `Infragistics35.WebUI.WebDataInput.v10.3`, all version `10.3.20103.2120`) — every public type's base class comes from this vendor library set.
- No `<ProjectReference>` elements exist in the project file; the `SAIF.Presentation`, `SAIF.Presentation.Web`, and `SAIF.Presentation.Web.Controls.V2` namespaces are brought in only via project-level VB `Imports`, so the actual assembly/compilation relationship to those namespaces is not directly confirmed from the project file alone**.
- The project's `AssemblyName` (`SAIF.Presentation.Web.Controls.Infragistics103`) differs from its `RootNamespace`/imported namespace (`SAIF.Presentation.Web.Controls.V2`), indicating this project's compiled types are intended to logically extend the `SAIF.Presentation.Web.Controls.V2` namespace rather than form an independent one*.
- Per the root `.nuspec`, this project's `.vb` source is bundled directly into the `SAIF.BOF.Presentation.Web.Infragistics103` package rather than being packaged as its own compiled assembly; the actual compiled output is supplied by a sibling project's build (`SAIF.Presentation.Web.Core.Infragistics103`)*.
- `clsDropDownController` relies on reflection (`System.ComponentModel.TypeDescriptor`) to read arbitrary data-source properties named by `List1Code`/`List1Display`/`List2Code`/`List2Display`/`List2Key`; if no `TypeConverter` to `String` is found for a given property, the corresponding `ListItem` field is silently left blank rather than raising an error.
- No dependency-injection, factory, or abstract binder framework is present; all four classes are standalone, instantiated declaratively as server controls.

## 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)
- [Configuration settings](configuration.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. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- SAIF.Presentation.Web.Controls.Infragistics103\SAIF.Presentation.Web.Controls.Infragistics103.vbproj
- SAIF.Presentation.Web.Controls.Infragistics103\SAIFWarp.vb
- SAIF.Presentation.Web.Controls.Infragistics103\clsDropDownController.vb
- SAIF.Presentation.Web.Controls.Infragistics103\SAIFWebDateTimeEdit.vb
- SAIF.Presentation.Web.Controls.Infragistics103\SAIFWebMaskEdit.vb
- SAIF.Presentation.Web.Controls.Infragistics103\My Project\AssemblyInfo.vb
- SAIF.BOF.Presentation.Web.Infragistics103.nuspec
- SAIF.Presentation.Web.Infragistics103.sln
