SAIF.Presentation.Web.Controls.AJAX.Infragistics111 architecture¶
SAIF.Presentation.Web.Controls.AJAX.Infragistics111 is a WebForms server-control library that layers AJAX Control Toolkit and Infragistics 11.1 behavior onto the SAIF presentation stack. It provides three capability groups: auto-binding editors that bind themselves to a page model by reflection and surface IDataErrorInfo validation messages; hover help controls built on the toolkit's HoverMenuExtender, optionally fed from the APPLICATION_HELP_* tables through two BOF business objects; and an Infragistics grid customizer that lets a user choose visible grid columns and page size in a modal popup and persist those choices as user preferences.
Responsibilities¶
- Provide reflection-based, two-way, convention-driven data binding between page controls and a hosting page's
Modelproperty, including validation surfaced through the bound object'sIDataErrorInfo. - Provide hover-help UI (
HoverPanel,HoverLabel,HoverPicture,HoverHelp,HoverHelpControl) built on the AJAX Control Toolkit'sHoverMenuExtender, optionally backed by theclsHelpText/clsHelpTextCollectionBOF business objects. - Let a user customize an
UltraWebGrid's visible columns and page size in a modal popup, and persist those choices as per-user preferences (InfragisticsGridCustomizer). - Sit at the top of the intra-package presentation dependency chain, composing SAIF.Presentation.Web.Controls.Infragistics111 and
SAIF.Presentation.Web.Binding.Infragistics111.
Component boundaries¶
SAIFAJAXControlAncestor(extendsSystem.Web.UI.WebControls.CompositeControl): root ancestor for every control in this library; exposes the page'sModelasRootObjectand a browser-detection helper.AutoBindControlAncestor(implementsiAutoBindingControl) and its concrete editorsAutoBindTextbox,AutoBindWebMaskEdit,AutoBindWebDateTimeEdit: reflection-based two-way binding, validation, and error display, each wrapped in an Infragistics WARP inside a hover-trigger panel.BindingManager: page-level orchestrator that pushes the root model into everyiAutoBindingControlon the page and aggregatesIsValid/ErrorMessages.BindingUtility: shared reflection/TypeDescriptor-based helper (GetObject,GetObjectValue,SetObjectValue,BindValue) used by the auto-binding controls.- Hover-help family (
HoverPanel,HoverPanelControl,HoverLabel,HoverPicture,HoverHelp,HoverHelpControl): presentation-only, independent of the binding sub-system except for a shared ancestor. - Grid customization family (
ModalGridCustomizer,GridCustomizationPanel(Friend),InfragisticsGridCustomizer,InfragisticsGridCustomizerList,HidableInfragisticsColumn,ColumnPreferenceList): a self-contained popup-based column/page-size editor forUltraWebGridthat persists state throughclsPreferences. clsHelpText/clsHelpTextCollection(BOF business objects, inheritclsBusinessBase/clsBusinessCollectionBase): read-only help text lookup by application code and reference key, backing the hover-help controls.
Interaction model¶
- Every control expects the hosting page to expose a property named
Model;BindingManager.RootObjectNameis publicly settable but the privateGetRootObjecthard-codes"Model", so the setting is not honored.* - Binding paths are dotted strings (
BindSource, e.g.Submission.Locations.Primary) walked byBindingUtility.GetObjectvia reflection/TypeDescriptor, with no compile-time checking;BindingUtilityswallows all exceptions, so a mistyped path fails silently.* - Validation reuses the bound object's
IDataErrorInfoimplementation; error text is split on CRLF into individual messages and rendered without HTML encoding.* ModalGridCustomizercomposesGridCustomizationPanel(the modal popup body) withInfragisticsGridCustomizer(per-grid column/page-size state) and, depending onBindingBehavior, rebinds the grid throughSAIF.Presentation.Web.Binding.Infragistics111'sclsObjectBindManager— a second, parallel binding mechanism alongside this library's own reflection-based binding.*- Per-page grid-customizer instances are cached in an
InfragisticsGridCustomizerListheld on the model underGridCustomizers, keyed by grid ID, so column state survives postbacks for the life of the model.* - Column and page-size preferences are read/written via
clsPreferencesobtained by reflection from the model'sPreferencesproperty, using composite keysIGC_<gridId>_ColumnSelectionandIGC_<gridId>_PageSize.
Architecture diagram¶
The following diagram shows the three cooperating sub-systems that share one ancestor but are otherwise independent.
flowchart TD
ANC["SAIFAJAXControlAncestor<br>CompositeControl"] --> ABA["AutoBindControlAncestor<br>iAutoBindingControl"]
ANC --> HP["HoverPanel / HoverPanelControl"]
ANC --> HL["HoverLabel / HoverPicture / HoverHelpControl"]
ANC --> GCP["GridCustomizationPanel (Friend)"]
ANC --> MGC["ModalGridCustomizer"]
ABA --> ABT["AutoBindTextbox"]
ABA --> ABM["AutoBindWebMaskEdit"]
ABA --> ABD["AutoBindWebDateTimeEdit"]
HP --> HH["HoverHelp"]
HL --> HH
HH --> HT["clsHelpText / clsHelpTextCollection<br>clsBusinessBase"]
MGC --> GCP
MGC --> IGC["InfragisticsGridCustomizer<br>+ HidableInfragisticsColumn<br>+ ColumnPreferenceList"]
BM["BindingManager"] --> ABA
ABA --> BU["BindingUtility (reflection)"]
IGC --> PREF["clsPreferences<br>SAIF.Framework.Preferences"]
Sequence diagram¶
The following diagram shows a user customizing grid columns through the modal popup and the resulting preference persistence.
sequenceDiagram
participant User
participant MGC as ModalGridCustomizer
participant GCP as GridCustomizationPanel
participant IGC as InfragisticsGridCustomizer
participant Pref as clsPreferences
participant Grid as UltraWebGrid
User->>MGC: Open customizer (ModalPopupExtender)
MGC->>GCP: Render column checkbox list
User->>GCP: Toggle columns, click OK/Apply
GCP->>IGC: Update(selected columns, page size)
IGC->>Pref: SavePreferences (IGC_<gridId>_ColumnSelection / PageSize)
IGC->>Grid: ManipulateGrid - remove deselected columns
Grid-->>User: Updated grid rendering
Design constraints¶
Option StrictisOffat the project level (a few files opt in toOption Strict On), permitting late binding across most of the library.*- The binding mechanism in this library is separate from and parallel to
SAIF.Presentation.Web.Binding.Infragistics111'sclsObjectBindManager, which it also consumes for grid rebinding — two independent binding mechanisms coexist in the presentation stack.* - Hover content, validation messages, and link-button text are rendered without HTML encoding; because validation text can originate from user-entered values and help text from a database table, unencoded rendering is a potential stored/reflected cross-site-scripting exposure if either source is not fully trusted.*
- No authentication or authorization logic exists in this library — help text retrieval has no user filter and no role/permission check is present anywhere.
- Several hard-coded hosting-environment paths are required at runtime (
/Resources/Scripts/SAIFAJAXControls.js,/Resources/Images/DefaultHelpImage.gif,/Resources/Images/DefaultModalGridCustomizer.gif); the packaging.nuspecships only.vbsource, so consumers must supply these assets independently.* clsHelpTextCollectioninherits the non-genericclsBusinessCollectionBaserather than the genericclsBusinessCollection(Of T)used elsewhere in the packaged set, suggesting an older framework generation.**
Related documentation¶
- Index
- Overview
- Dependencies
- Operations and processes
- Business rules
- Database tables
- SQL catalog
- API reference
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.AJAX.Infragistics111/SAIFAJAXControlAncestor.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics111/AutoBindControlAncestor.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics111/BindingManager.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics111/BindingUtility.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics111/ModalGridCustomizer.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics111/InfragisticsGridCustomizer.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics111/GridCustomizationPanel.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics111/clsHelpText.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics111/clsHelpTextCollection.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics111/SAIF.Presentation.Web.Controls.AJAX.Infragistics111.vbproj