---
title: SAIFTextBox
summary: API reference for SAIFTextBox.
status: draft
owner: SAIF Documentation Team
last_reviewed: 2026-08-17
library: SAIF.Presentation.Web.Controls.V2
reference_type: package
---

# SAIFTextBox

`SAIFTextBox` is a `TextBox` subclass that adds a client-side character counter for multi-line text boxes with a configured `MaxLength`, rendering an additional message panel beneath the text box that the associated `TextBox.js` script updates as the user types.

## Purpose
- Give multi-line text boxes with a character limit a visible remaining-character counter, without requiring host pages to build the counter UI themselves.

## Context
- Namespace: `SAIF.Presentation.Web.Controls.V2`
- Assembly/package: Compiled into `SAIF.BOF.Presentation.Web.Infragistics103`*

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| `ShowCharacterCounter` | `Public Property ShowCharacterCounter As Boolean` | Enables the rendered character-counter panel for multi-line boxes with `MaxLength > 0`; defaults to `True`. |
| `RenderControl(writer)` | `Public Overrides Sub RenderControl(ByVal writer As HtmlTextWriter)` | Adds a `SaifMaxLength` HTML attribute (read by `TextBox.js`) and, when applicable, renders the counter panel after the base text box markup. |
| `CreateChildControls()` | `Protected Overrides Sub CreateChildControls()` | Creates the counter message `Panel` child control when the box is multi-line, has a `MaxLength`, and `ShowCharacterCounter` is enabled. |

## Inherited public members

`SAIFTextBox` inherits from `TextBox` (`System.Web.UI.WebControls`), a framework base class rather than a documented SAIF dependency library.

| Member | Signature | Purpose |
| --- | --- | --- |
| `AutoCompleteType` | `Public Property AutoCompleteType As AutoCompleteType` | Hints browser autocomplete behavior for the text input. |
| `AutoPostBack` | `Public Property AutoPostBack As Boolean` | Determines whether text changes immediately post the page back when supported by the rendered mode. |
| `Columns` | `Public Property Columns As Integer` | Visible character width of the rendered text box. |
| `MaxLength` | `Public Property MaxLength As Integer` | Maximum number of characters accepted by the control. |
| `ReadOnly` | `Public Property ReadOnly As Boolean` | Prevents user edits while still rendering the text value. |
| `Rows` | `Public Property Rows As Integer` | Visible row count when the text box is multi-line. |
| `Text` | `Public Property Text As String` | Current text content edited or displayed by the control. |
| `TextMode` | `Public Property TextMode As TextBoxMode` | Selects single-line, multi-line, password, and other input rendering modes. |
| `Wrap` | `Public Property Wrap As Boolean` | Controls line wrapping behavior for multi-line text boxes. |
| `TextChanged` | `Public Event TextChanged As EventHandler` | Standard text-change event raised after postback. |

Standard `TextBox`/`Control` members (`ID`, `ClientID`, `Controls`, `Visible`, `DataBind`, `FindControl`, etc.) are not re-documented here as they are unmodified framework behavior**.

## Behavioral notes
- Only applies the character-counter behavior when `TextMode = TextBoxMode.MultiLine` and `MaxLength > 0`; single-line boxes and boxes without a `MaxLength` render unchanged.
- `RegisterClientScripts` registers `TextBox.js` on `Init`, which is expected to read the `SaifMaxLength` attribute and update the counter panel client-side.

## Constraints and usage notes
- Requires `TextBox.js` to be deployed at `/Resources/Scripts/Controls/TextBox.js` for the live counter update to function; its detailed logic could not be verified from this library's source**.

> **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\SAIFTextBox.vb
