---
title: Display hover help
summary: Renders a hover-triggered help panel above other page content using the AJAX Control Toolkit's HoverMenuExtender.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-08-17
library: SAIF.Presentation.Web.Controls.AJAX.Infragistics111
reference_type: package
operation_id: OP-AJAX-06
trigger: Page render, popup shown client-side on hover
---

# Display hover help

This operation builds and renders a hover panel that pops up above other page content when the user hovers the configured trigger control, showing whatever content has been assigned to the panel.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-AJAX-06 |
| **Trigger** | Page render (composition); client-side hover event (display) |
| **Inputs** | `ContentText`, `TargetControlID`, `PopupPosition`, `PanelWidth` |
| **Outputs** | Rendered hover panel markup and a `HoverMenuExtender` wired to the trigger |
| **Primary components** | `HoverPanel.CreateChildControls`, `LayoutControls`, `RenderContents` |
| **Entry point** | `SAIF.Presentation.Web.Controls.AJAX.Infragistics111/HoverPanel.vb` |

## Steps

1. `CreateChildControls` builds a `Panel` → `Table` → `TableRow` → `TableCell` structure and a toolkit `HoverMenuExtender` whose `TargetControlID` is the caller-supplied trigger and whose `PopupControlID` is the panel.
2. `LayoutControls` applies the `HoverHelp` / `thinDivFrame` CSS classes, sets the panel width, hides it with `Display: None`, and forces `Z-INDEX: 99999999` so it renders above other page content. ([BR-AJAX-014](../business-rules.md#br-ajax-014-a-hover-panel-renders-above-all-content-and-is-hidden-until-shown))
3. The content cell's `Text` is set directly from `ContentText`, without HTML encoding. ([BR-AJAX-015](../business-rules.md#br-ajax-015-hover-content-is-written-unencoded))
4. `RenderContents` renders nothing at runtime unless `ContentText` is non-empty. ([BR-AJAX-016](../business-rules.md#br-ajax-016-hover-controls-render-nothing-when-there-is-no-content))
   - On extender-render failure: the extender is rendered inside a `Try`/`Catch` that discards any exception.*

## Process flow

The following diagram visualizes this operation's control flow.

```mermaid
flowchart TD
	Start([Page render]) --> Build[CreateChildControls builds panel + HoverMenuExtender]
	Build --> Layout[LayoutControls applies CSS, width, Display:None, Z-INDEX]
	Layout --> SetText[Set content cell Text from ContentText]
	SetText --> HasContent{ContentText<br>non-empty?}
	HasContent -->|No| EndEmpty([Render nothing])
	HasContent -->|Yes| Render[RenderContents renders panel + extender]
	Render --> EndOk([Hover panel available client-side])
```

## Failure and edge-case behavior
- If `ContentText` is empty, the control renders nothing — no empty help icon or panel appears. ([BR-AJAX-016](../business-rules.md#br-ajax-016-hover-controls-render-nothing-when-there-is-no-content))
- Any exception raised while rendering the toolkit extender is caught and discarded.*
- Because `ContentText` is written unencoded, callers must ensure the text is trusted or pre-encoded; untrusted content is a cross-site-scripting exposure. ([BR-AJAX-015](../business-rules.md#br-ajax-015-hover-content-is-written-unencoded))

## Related documentation
- [Operations and processes](../operations-processes.md)
- [Business rules](../business-rules.md)
- [SQL catalog](../sql/index.md)
- [Database tables](../database-tables.md)

> **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/HoverPanel.vb`
- `SAIF.Presentation.Web.Controls.AJAX.Infragistics111/HoverPanelControl.vb`
- `SAIF.Presentation.Web.Controls.AJAX.Infragistics111/HoverPicture.vb`
