---
title: SAIF.Presentation.Web.Controls.V2.Menu operations and processes
summary: Business and technical operations supported by this library.
status: draft
owner: SAIF documentation team
last_reviewed: 2026-08-17
library: SAIF.Presentation.Web.Controls.V2.Menu
reference_type: package
---

# SAIF.Presentation.Web.Controls.V2.Menu operations and processes

This page is the operation catalog and cross-operation hub for this library. Each operation's detailed, step-by-step logic lives in its own page under `operations/`.

## Operation catalog
| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Render side navigation menu](operations/render-side-navigation-menu.md) | Render the left "Applications"/Favorites navigation panel | ASP.NET page lifecycle when `SAIFMenu` is placed on a `ViewPageBase`-derived page | Windows user identity, session-cached `NavigationContext`, `ShowApps`/`SelectedCategory`/`ContextLabel` ViewState, `clsPreferences("SHOWAPPS")` | Rendered favorites list, application/category accordion, context-value text box; `MenuNavigate`/`DefaultOnSubmit`/`OnContextChanged` events | n/a — no business rules enforced natively | n/a | n/a |
| [Render top toolbar menu](operations/render-top-toolbar-menu.md) | Render the top category-link row and CRUD/print/help toolbar | ASP.NET page lifecycle when `SAIFMenuTop` is placed on a `ViewPageBase`-derived page | Session-cached `NavigationContext`, `SelectedCategory`, per-button `clsMenuButton` ViewState, current page's `clsMenuAuthorizedItem`, browser capabilities | Rendered category link row and icon toolbar; `MenuNavigate`/`ToolbarClick`/`DefaultOnSubmit` events | n/a — no business rules enforced natively | n/a | n/a |
| [Render busy-indicator image button](operations/render-busy-indicator-image-button.md) | Add a "busy indicator" CSS class and client script to a toolbar icon | `PreRender` event of any `SAIFImageButton` instance | `EnableIndicator`/`DisableFormControlsOnClick` property values | CSS class change, registered client script include | n/a | n/a | n/a |

## Process flow diagram
The following diagram visualizes the primary operational flow when both controls are placed on the same host page.

```mermaid
flowchart TD
	Start([Page lifecycle begins]) --> Init[Resolve host Page as ViewPageBase]
	Init --> NavData[GetNavigationData - resolve/cache NavigationContext in Session]
	NavData --> RenderMenu[Render SAIFMenu: favorites + accordion + context box]
	NavData --> RenderTop[Render SAIFMenuTop: category links + icon toolbar]
	RenderTop --> ImgBtn[Render SAIFImageButton instances with busy-indicator behavior]
	RenderMenu --> UserClick{User clicks a link or icon?}
	RenderTop --> UserClick
	UserClick -->|Favorite/category link| Navigate([Raise MenuNavigate for host page])
	UserClick -->|Toolbar icon| Toolbar([Raise ToolbarClick for host page])
	UserClick -->|No interaction| EndRender([Render complete])
```

## Failure and edge-case behavior
- Both `SAIFMenu.RenderControl` and `SAIFMenuTop.RenderControl` swallow rendering exceptions and write the exception message/source/stack trace directly into the HTML output stream instead of re-throwing or logging, which can leak internal implementation details to end users in production*.
- `SAIFMenu.AddLinks` throws an `ApplicationException` if a duplicate or blank accordion pane ID is generated while building the application/category accordion.
- If no per-user `"SHOWAPPS"` preference exists, `SAIFMenu` defaults the applications accordion to expanded (`True`)*.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Business rules](business-rules.md)
- [Control catalog](control-catalog.md)
- [Configuration](configuration.md)
- [Security and authorization](security-authorization.md)
- [API reference](api/index.md)

## Sources
- `SAIF.Presentation.Web.Controls.V2.Menu\SAIFMenu.vb`
- `SAIF.Presentation.Web.Controls.V2.Menu\SAIFMenuTop.vb`
- `SAIF.Presentation.Web.Controls.V2.Menu\SAIFImageButton.vb`
