SAIF.Presentation.Web.Controls.V2 architecture¶
SAIF.Presentation.Web.Controls.V2 is a single-layer ASP.NET Web Forms server control library supplying the second-generation ("V2") SAIF look-and-feel control set: styled input controls, layout/navigation containers, a data grid, a status-message control, and behavior helpers. Every control renders HTML and registers client-side JavaScript from the consuming application's /Resources/ folder; the library performs no data access, configuration-file, or authorization logic of its own.
Responsibilities¶
- Render SAIF-branded chrome (
BannerControl,BannerControlV2) driven by an external/Resources/SiteBanner.xmlcontent file. - Provide layout and grouping controls (
SAIFPanel,ConditionsGrid) and in-page navigation controls (SAIFTabs,SAIFTabBar). - Supply styled data-entry controls (
SAIFTextBox,SAIFCheckBox,SAIFCheckBoxList,SAIFRadioButton,SAIFRadioButtonList,SAIFDropDownList,SAIFComboBox,SAIFListBox,MultiListControl) each with an optional read-only rendering mode. - Supply action/submission controls (
SAIFButton,OneClickSubmit,SAIFAlphaNumericLinkControl) and a styled data grid (SAIFGrid). - Supply user-feedback controls (
SAIFMessage,SAIFHoverHelp,FocusManager) and the cross-controlUtilities.mdlUtilitiesattribute helper.
Component boundaries¶
- Branding/site chrome:
BannerControl,BannerControlV2— the only controls with an environment-service dependency (AppGlobal.EnvironmentService.IsClientExternal) gating logout/feedback link visibility. - Layout and grouping:
SAIFPanel(+SAIFPanelDesigner,PanelState),ConditionsGrid. - Navigation within a page:
SAIFTabs(+TabSettings,SAIFTabEventArgs,SAIFTabsDesigner),SAIFTabBar(+ tab/collection/sorter types). - Data entry: the styled input control set, each a thin subclass over a stock ASP.NET control that overrides
Render/RenderControland, where needed,CreateChildControls. - Action/submission:
SAIFButton,OneClickSubmit,SAIFAlphaNumericLinkControl. - Data display:
SAIFGrid. - User feedback:
SAIFMessage,SAIFHoverHelp,FocusManager. - Cross-control utility:
Utilities.mdlUtilities.
No type in this library inherits from a SAIF.Framework.* or SAIF.BOF.Framework base class — all inheritance is from ASP.NET Web Forms types (WebControl, CompositeControl, Control, Button, TextBox, CheckBox, CheckBoxList, RadioButton, RadioButtonList, DropDownList, ListBox, GridView, Label, Panel) and design-time types (ControlDesigner, ContainerControlDesigner).
Interaction model¶
- Controls are dropped directly onto consuming application pages; there is no controller, model, or data-access layer in this library — each control renders itself and raises UI events (
LinkClicked,TabClicked, row-click events) for the hosting page to handle. BannerControl/BannerControlV2read/Resources/SiteBanner.xmlfor banner markup, links, and labels, and callAppGlobal.EnvironmentService.IsClientExternalto decide whether logout/feedback links are shown.- Client-script registration happens in
Init/Load, guarded byIsClientScriptIncludeRegisteredso pages hosting many control instances emit each script include once; scripts and images are referenced by hard-coded absolute paths under the site's/Resources/folder.MultiListControlis the exception — it ships its own JavaScript (MultiList.js) and image (MultiComboArrow.gif) as embeddedWebResourceassets. SAIFMessage(this library) is consumed byclsObjectBindManagerinSAIF.Presentation.Web.Binding.Infragistics111to display aggregated validation errors, and byAppViewMasterPageBaseinSAIF.Presentation.Web.Core.Infragistics111for status messaging.
Architecture diagram¶
The following diagram shows the control set's relationship to its rendering and external asset touchpoints.
flowchart TD
A[ASP.NET Web Forms base controls] --> B[SAIF V2 control set]
B --> C[Rendered HTML]
B --> D["/Resources/Scripts/*.js includes"]
B --> E["/Resources/Images/* static assets"]
B --> F["/Resources/SiteBanner.xml"]
G["SAIF.Framework.Security AppGlobal.EnvironmentService"] --> H[BannerControl / BannerControlV2]
B --> I["Embedded WebResource<br>MultiList.js + MultiComboArrow.gif"]
Sequence diagram¶
The following diagram shows a typical read-only-mode data-entry control render.
sequenceDiagram
participant Page as Consuming page
participant Ctl as SAIF V2 control (e.g. SAIFCheckBox)
participant Res as /Resources/*
Page->>Ctl: Init/Load
Ctl->>Res: Register script include (guarded, once per page)
Page->>Ctl: RenderControl
alt ReadOnly = True
Ctl-->>Page: Static markup (image/disabled textbox)
else ReadOnly = False
Ctl-->>Page: MyBase.Render (interactive control)
end
Design constraints¶
- The library depends on a fixed
/Resources/folder layout (scripts, images,SiteBanner.xml) in every hosting application; controls are non-functional without those assets being supplied by the consumer.* AppGlobal.EnvironmentService(owning assembly not present in this repository) is the only framework coupling, limited to theIsClientExternalcheck in the banner controls.**- Several controls build read-only markup by concatenating
Text,CssClass,ClientIDand style values into aStringBuilderwithout HTML encoding — a cross-site-scripting risk if any value is attacker-influenced.* BannerControl.RenderwritesInnerXmlfromSiteBanner.xmldirectly to the response, so the banner file is effectively trusted markup.SAIFMessage.RenderControlcatches exceptions and writes the message, source, and stack trace into the rendered page — an information-disclosure risk in production.- Ten controls carry
AspNetHostingPermissionCASDemand/InheritanceDemandattributes atMinimallevel — standard boilerplate, not an application authorization mechanism. - No database, configuration file, or authentication/authorization logic exists anywhere in this library.
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.
Related documentation¶
Sources¶
SAIF.Presentation.Web.Controls.V2/Banner.vbSAIF.Presentation.Web.Controls.V2/BannerControlV2.vbSAIF.Presentation.Web.Controls.V2/SAIFMessage.vbSAIF.Presentation.Web.Controls.V2/SAIFPanel.vbSAIF.Presentation.Web.Controls.V2/SAIFTabs.vbSAIF.Presentation.Web.Controls.V2/SAIFTabBar.vbSAIF.Presentation.Web.Controls.V2/MultiListControl.vbSAIF.Presentation.Web.Controls.V2/SAIF.Presentation.Web.Controls.V2.vbproj