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
WebAsyncRefreshPanelasynchronous refresh (SAIFWarp). - Generate client-side JavaScript that cascades a child
UltraWebGridcolumn'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 viaPage.ClientScriptscript registration.
Component boundaries¶
SAIFWarp(extendsInfragistics.WebUI.Misc.WebAsyncRefreshPanel): layout/async-container wrapper; owns focus-restoration and error-notification script registration.SAIFWebDateTimeEdit(extendsInfragistics.WebUI.WebDataInput.WebDateTimeEdit): input wrapper; owns sentinel-date suppression on focus.SAIFWebMaskEdit(extendsInfragistics.WebUI.WebDataInput.WebMaskEdit): input wrapper; owns phone/tax-ID value normalization (PhoneValue,TaxIdValue).clsDropDownController(extendsSystem.Web.UI.Control): non-rendering behavior controller; owns cascade-script generation for twoUltraWebGridcolumns via its nestedListItemdata holder.- Each type is independent — there is no shared base class, manager, factory, or inter-type call within the library.*
Interaction model¶
- A consuming
.aspxpage 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). SAIFWebMaskEditexposes 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 StrictisOffand a broadNoWarnlist is configured for this project, permitting late binding and implicit conversions (used inclsDropDownController.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).
Related documentation¶
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.vbprojSAIF.Presentation.Web.Controls.Infragistics111/SAIFWarp.vbSAIF.Presentation.Web.Controls.Infragistics111/SAIFWebDateTimeEdit.vbSAIF.Presentation.Web.Controls.Infragistics111/SAIFWebMaskEdit.vbSAIF.Presentation.Web.Controls.Infragistics111/clsDropDownController.vb