Skip to content

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.xml content 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-control Utilities.mdlUtilities attribute 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/RenderControl and, 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/BannerControlV2 read /Resources/SiteBanner.xml for banner markup, links, and labels, and call AppGlobal.EnvironmentService.IsClientExternal to decide whether logout/feedback links are shown.
  • Client-script registration happens in Init/Load, guarded by IsClientScriptIncludeRegistered so 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. MultiListControl is the exception — it ships its own JavaScript (MultiList.js) and image (MultiComboArrow.gif) as embedded WebResource assets.
  • SAIFMessage (this library) is consumed by clsObjectBindManager in SAIF.Presentation.Web.Binding.Infragistics111 to display aggregated validation errors, and by AppViewMasterPageBase in SAIF.Presentation.Web.Core.Infragistics111 for 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 the IsClientExternal check in the banner controls.**
  • Several controls build read-only markup by concatenating Text, CssClass, ClientID and style values into a StringBuilder without HTML encoding — a cross-site-scripting risk if any value is attacker-influenced.*
  • BannerControl.Render writes InnerXml from SiteBanner.xml directly to the response, so the banner file is effectively trusted markup.
  • SAIFMessage.RenderControl catches exceptions and writes the message, source, and stack trace into the rendered page — an information-disclosure risk in production.
  • Ten controls carry AspNetHostingPermission CAS Demand/InheritanceDemand attributes at Minimal level — 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.

Sources

  • SAIF.Presentation.Web.Controls.V2/Banner.vb
  • SAIF.Presentation.Web.Controls.V2/BannerControlV2.vb
  • SAIF.Presentation.Web.Controls.V2/SAIFMessage.vb
  • SAIF.Presentation.Web.Controls.V2/SAIFPanel.vb
  • SAIF.Presentation.Web.Controls.V2/SAIFTabs.vb
  • SAIF.Presentation.Web.Controls.V2/SAIFTabBar.vb
  • SAIF.Presentation.Web.Controls.V2/MultiListControl.vb
  • SAIF.Presentation.Web.Controls.V2/SAIF.Presentation.Web.Controls.V2.vbproj