Skip to content

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.

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.

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

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