Aller au contenu principal

LgSuggestBox

LgSuggestBox est un champ texte qui propose des suggestions pendant la saisie : les valeurs correspondantes sont affichées dans un menu déroulant et la valeur retenue reste une saisie libre (la sélection d'une suggestion est facultative). Les suggestions viennent d'une liste locale (Items) ou d'un contrôleur distant (ControllerUri).

<LgSuggestBox Label="#City" Items="_cities" @bind-Value="_model.City" />
  • Espace de noms : Lagoon.UI.Components
  • Hérite de : LgSuggestBoxBase<string> → LgTextBox → LgInputRenderBase<string> → LgInputBase<string> → LgAriaComponentBase → LgComponentBase
  • Interfaces : ILgDropDownComponent
  • Package NuGet : Lagoon.UI
Suggestion ou sélection ?

LgSuggestBox accepte une valeur libre ; les suggestions ne sont qu'une aide à la saisie. Pour contraindre la valeur à une liste fermée, utilisez LgSelect.

Utilisation​

Démonstration​

Essayez ce composant dans le showcase Lagoon.

Suggestions locales​

Items fournit la liste des valeurs proposées. Le texte saisi filtre la liste (mode Contains par défaut) et le menu ne s'ouvre que s'il y a des résultats.

CityPage.razor
<LgSuggestBox Label="#City"
Items="_cities"
Placeholder="#TypeCityName"
@bind-Value="_model.City" />
CityPage.razor.cs
public partial class CityPage : LgPage
{
// Valeurs suggérées : la saisie reste libre, la liste n'est qu'une aide.
private readonly List<string> _cities = new() { "Paris", "Lyon", "Marseille", "Toulouse", "Nantes" };

private readonly CityVm _model = new();

private sealed class CityVm
{
public string City { get; set; }
}
}

Suggestions distantes avec ControllerUri​

Pour une liste volumineuse ou dépendante du serveur, ControllerUri pointe vers une action queryable : le composant poste automatiquement une requête de données vers {ControllerUri}/$qd avec le texte saisi, le filtre et la pagination.

SupplierPage.razor
<LgSuggestBox Label="#Supplier"
ControllerUri="api/suppliers/names"
MinSearchCharacter="2"
SeeAllEnabled="true"
@bind-Value="_model.Supplier" />
SupplierPage.razor.cs
public partial class SupplierPage : LgPage
{
private readonly SupplierVm _model = new();

private sealed class SupplierVm
{
public string Supplier { get; set; }
}
}

Contrat des endpoints​

ControllerUri pointe vers une action queryable. Le composant appelle {ControllerUri}/$qd en POST via le chargeur distant Lagoon ; l'action source reste exposée en GET et décorée avec [Queryable].

GET + POST $qd — Recherche de suggestions (ControllerUri)​

SuppliersController.cs
[ApiController]
[Route("api/suppliers")]
public class SuppliersController : LgControllerBase
{
private readonly ApplicationDbContext _db;

public SuppliersController(ApplicationDbContext db)
{
_db = db;
}

[HttpGet("names")]
[Queryable]
public IQueryable<string> GetNames()
{
// Retourne IQueryable<string> pour laisser [Queryable] appliquer le texte
// recherché, la pagination et le tri envoyés par le composant.
return _db.Suppliers.Select(s => s.Name);
}
}

Filtrage, collation et nombre de résultats​

FilterTextSearchMode, TextFilterCollation, MinSearchCharacter et MaxItemsInView ajustent le comportement de recherche. HighlightText surligne le texte trouvé dans les résultats et SeeAllEnabled ajoute un bouton « Voir tout » quand plus de résultats sont disponibles que MaxItemsInView.

ProductPage.razor
<LgSuggestBox Label="#Product"
Items="_products"
FilterTextSearchMode="FilterTextSearchMode.StartsWith"
TextFilterCollation="CollationType.IgnoreCaseAndAccent"
MinSearchCharacter="1"
MaxItemsInView="10"
HighlightText="true"
@bind-Value="_model.Product" />
ProductPage.razor.cs
public partial class ProductPage : LgPage
{
private readonly List<string> _products = new() { "Écrou M6", "Écrou M8", "Vis M6", "Vis M8", "Rondelle M6" };

private readonly ProductVm _model = new();

private sealed class ProductVm
{
public string Product { get; set; }
}
}

Personnaliser le rendu des suggestions​

ItemContent remplace le rendu par défaut d'une suggestion. Avec HighlightText, ajoutez la classe highlightable sur l'élément qui contient le texte à surligner.

AccountPage.razor
<LgSuggestBox Label="#Account" Items="_accounts" HighlightText="true" @bind-Value="_model.Account">
<ItemContent Context="item">
<LgIcon IconName="@IconNames.All.PersonFill" />
<span class="highlightable">@item</span>
</ItemContent>
</LgSuggestBox>
AccountPage.razor.cs
public partial class AccountPage : LgPage
{
private readonly List<string> _accounts = new() { "compta-fournisseurs", "compta-clients", "banque" };

private readonly AccountVm _model = new();

private sealed class AccountVm
{
public string Account { get; set; }
}
}

Propriétés​

Toutes les propriétés [Parameter] du composant, y compris celles héritées.

NomTypeDéfautDéclaré dansDescription
ControllerUristringnullLgSuggestBoxBase<TItem>URI du contrôleur utilisé pour charger les suggestions à distance.
DropDownMaxHeightint-1LgSuggestBoxBase<TItem>Hauteur maximale du menu déroulant, en pixels. -1 utilise l'espace disponible.
FilterTextSearchModeFilterTextSearchModeContainsLgSuggestBoxBase<TItem>Mode de comparaison utilisé pour filtrer le texte recherché.
HighlightTextboolfalseLgSuggestBoxBase<TItem>Surligne le texte trouvé dans les suggestions affichées.
ItemContentRenderFragment<string>nullLgSuggestBoxBase<TItem>Template personnalisé pour rendre une suggestion.
ItemsIEnumerable<string>nullLgSuggestBoxBase<TItem>Source locale des suggestions.
MaxItemsInViewint8LgSuggestBoxBase<TItem>Nombre maximum de suggestions affichées. 0 affiche tous les résultats.
MinSearchCharacterint0LgSuggestBoxBase<TItem>Nombre minimal de caractères avant de lancer la recherche.
SeeAllEnabledboolfalseLgSuggestBoxBase<TItem>Affiche un bouton « Voir tout » quand plus de résultats sont disponibles que MaxItemsInView.
TextFilterCollationCollationType?nullLgSuggestBoxBase<TItem>Sensibilité à la casse et aux accents. Si null, la configuration de comportement de l'application s'applique.
AllowResizeboolfalseLgTextBoxAutorise le redimensionnement lorsque TextMode vaut TextBoxMode.Multiline.
AutoCompleteboolfalseLgTextBoxActive l'autocomplétion du navigateur si true ; sinon l'attribut autocomplete="off" est rendu.
AutoUnmaskboolfalseLgTextBoxRetourne la valeur sans le masque lorsque InputMask est utilisé.
ClearIncompleteboolfalseLgTextBoxVide la valeur si le masque de saisie est incomplet.
DataListList<string>nullLgTextBoxListe de valeurs utilisée pour rendre un datalist associé à l'entrée.
InputMaskstringnullLgTextBoxMasque de saisie appliqué au champ texte.
InputMaskKindInputMaskKindNoneLgTextBoxType de masque de saisie.
InputMaskPlaceholderstringnullLgTextBoxCaractère remplissant les positions vides du masque de saisie (par exemple # avec le masque 99-99-99-99-99 affiche ##-##-##-##-##). À ne pas confondre avec Placeholder. Sans valeur, le caractère par défaut du masque (_) est conservé.
MaxLengthint?nullLgTextBoxNombre maximal de caractères.
MaxRowsint?nullLgTextBoxNombre maximal de lignes lorsque TextMode vaut TextBoxMode.Multiline.
MinRowsint?nullLgTextBoxNombre minimal de lignes lorsque TextMode vaut TextBoxMode.Multiline.
OnChangeDisabledboolfalseLgTextBoxDésactive le gestionnaire onchange natif du champ.
OnChangingAsyncFunc<ChangingEventArgs<string>, Task>nullLgTextBoxCallback appelé avant le changement de valeur ; le changement peut y être annulé.
OnFocusEventCallback<FocusEventArgs>—LgTextBoxCallback appelé à la prise de focus (déclenche aussi la recherche initiale).
OnInputEventCallback<ChangeEventArgs>—LgTextBoxCallback appelé à la saisie (oninput), utilisé par la recherche.
OnKeyUpEventCallback<KeyboardEventArgs>—LgTextBoxCallback appelé au relâchement d'une touche.
PlaceholderstringnullLgTextBoxTexte indicatif affiché quand le champ est vide. Distinct de InputMaskPlaceholder.
Rowsint?nullLgTextBoxNombre de lignes lorsque TextMode vaut TextBoxMode.Multiline.
TextModeTextBoxMode?nullLgTextBoxMode du champ texte. null rend un champ texte simple.
PrefixstringnullLgInputRenderBasePréfixe affiché dans le champ.
PrefixTypeInputLabelTypeTextLgInputRenderBaseNature du préfixe.
SuffixstringnullLgInputRenderBaseSuffixe affiché dans le champ.
SuffixTypeInputLabelTypeTextLgInputRenderBaseNature du suffixe.
AdditionalAttributesIReadOnlyDictionary<string, object>nullLgInputBaseAttributs HTML additionnels appliqués à l'élément rendu.
AutoFocusboolfalseLgInputBaseDonne le focus au champ lors du premier rendu.
ConfirmationMessagestringnullLgInputBaseMessage de confirmation affiché avant d'appliquer un changement de valeur.
ContainerIInputContainer<string>nullLgInputBaseUsage interne : rattache une cellule de GridView au champ.
CssClassstringnullLgInputBaseClasses CSS additionnelles.
DisabledboolfalseLgInputBaseDésactive le champ.
DisplayNamestringnullLgInputBaseNom du champ utilisé dans les messages d'erreur.
HideValidationMessageboolfalseLgInputBaseMasque le message de validation sous le champ.
LabelstringnullLgInputBaseLibellé du champ.
LabelContentRenderFragmentnullLgInputBaseContenu personnalisé de la zone de libellé.
OnChangeEventCallback<ChangeEventArgs>—LgInputBaseCallback appelé après le changement de valeur.
OnResetEventCallback<ChangeEventArgs>—LgInputBaseCallback appelé quand le champ est réinitialisé par le bouton d'effacement.
PolicyEditstringnullLgInputBasePolicy requise pour modifier le champ.
PolicyVisiblestringnullLgInputBasePolicy requise pour afficher le champ.
ReadOnlyboolfalseLgInputBaseAffiche le champ en lecture seule.
Requiredbool?nullLgInputBaseChamp obligatoire. Si null, déduit de l'attribut [Required] de la propriété liée.
ResetButtonbool?nullLgInputBaseAffiche le bouton d'effacement. Si null, la configuration de comportement de l'application s'applique.
ResetTextstringnullLgInputBaseTexte du bouton d'effacement.
ResetTextAriaLabelstringnullLgInputBaseLibellé accessible (aria-label) du bouton d'effacement.
TooltipstringnullLgInputBaseBulle d'aide.
TooltipIsHtmlboolfalseLgInputBaseIndique si le contenu du Tooltip est au format HTML (sinon texte brut).
ValuestringnullLgInputBaseValeur liée (@bind-Value).
ValueChangedEventCallback<string>—LgInputBaseCallback de mise à jour de la valeur liée.
ValueExpressionExpression<Func<string>>—LgInputBaseExpression identifiant la propriété liée.
AriaLabelstringnullLgAriaComponentBaseValeur de l'attribut aria-label.
AriaLabelledBystringnullLgAriaComponentBaseValeur de l'attribut aria-labelledby.
Paramètres en cascade

LgSuggestBox consomme aussi des paramètres fournis automatiquement par des composants ancêtres (vous n'avez pas à les définir) : ParentAuthorizeView (LgAuthorizeView) et le contexte d'édition d'un LgEditForm parent.

Événements​

ÉvénementTypeDescription
OnChangingAsyncFunc<ChangingEventArgs<string>, Task>Avant le changement de valeur ; args.Cancel = true annule le changement.
OnChangeEventCallback<ChangeEventArgs>Après le changement de valeur (saisie validée ou suggestion sélectionnée).
OnInputEventCallback<ChangeEventArgs>À la saisie ; c'est aussi l'événement qui déclenche la recherche.
OnKeyUpEventCallback<KeyboardEventArgs>Au relâchement d'une touche.
OnFocusEventCallback<FocusEventArgs>À la prise de focus (déclenche la recherche initiale).
OnResetEventCallback<ChangeEventArgs>À la réinitialisation par le bouton d'effacement.

Énumérations associées​

Les énumérations de la famille suggest (FilterTextSearchMode, CollationType, InputMaskKind, TextBoxMode) sont documentées sur la page LgNavigationBox, qui partage la même base LgSuggestBoxBase.

Bonnes pratiques / accessibilité​

  • Fixez MinSearchCharacter à 2 ou 3 avec ControllerUri pour limiter les requêtes serveur sur les premiers caractères.
  • La valeur liée reste une saisie libre : validez-la côté modèle si seules les valeurs suggérées sont acceptables — ou utilisez LgSelect pour une liste fermée.
Référence complète

Tous les paramètres (hérités compris) : Référence API — LgSuggestBox.

Composants liés​

  • LgSelect — sélection dans une liste fermée.
  • LgTextBox — champ texte de base.
  • LgNavigationBox — recherche de navigation basée sur la même famille suggest.