Aller au contenu principal

LgEditForm

LgEditForm encadre les champs de saisie Lagoon : il construit l'EditContext du modèle, déclenche la validation et expose les événements de soumission. Tous les champs Lg* placés à l'intérieur participent automatiquement à la validation ; le validateur de DataAnnotations et le résumé de validation (LgValidationSummary) sont ajoutés automatiquement.

<LgEditForm Model="_model" OnValidSubmit="OnValidSubmitAsync">
...
</LgEditForm>
  • Espace de noms : Lagoon.UI.Components
  • Hérite de : LgComponentBase
  • Package NuGet : Lagoon.UI

Utilisation​

Formulaire simple​

Model désigne le modèle édité (un EditContext est construit pour lui) et OnValidSubmit est déclenché à la soumission quand le modèle est valide.

ContactEditPage.razor
<LgEditForm Model="_contact" OnValidSubmit="SaveAsync">
<LgTextBox Label="#Name" @bind-Value="_contact.Name" />
<LgTextBox Label="#Email" @bind-Value="_contact.Mail" />
<LgButton Text="#Save" IsSubmit="true" />
</LgEditForm>
ContactEditPage.razor.cs
public partial class ContactEditPage : LgPage
{
// Modèle édité par le formulaire : porte les DataAnnotations de validation.
private readonly ContactVm _contact = new();

// Déclenché uniquement quand le modèle est valide : c'est l'endroit où persister.
private async Task SaveAsync(EditContext editContext)
{
try
{
await Http.TryPostAsync("api/contacts", _contact);
}
catch (Exception ex)
{
ShowException(ex);
}
}

private sealed class ContactVm
{
[Required]
[MaxLength(50)]
public string Name { get; set; }

[EmailAddress]
public string Mail { get; set; }
}
}

Les trois niveaux de validation​

  • DataAnnotations : attributs posés sur les propriétés du modèle ([Required], [MaxLength(50)], [EmailAddress]…). Validés côté client (à la sortie du champ) et côté serveur.
  • IValidatableObject : règles multi-propriétés implémentées sur le modèle, évaluées à la soumission côté client et à la réception du vue-modèle côté serveur.
  • ModelState : validations qui ne peuvent se faire que côté serveur, dans l'action du contrôleur.
Validez toujours côté serveur

La validation côté client évite des allers-retours, mais elle se contourne facilement. Pour que la validation serveur soit automatique, le contrôleur doit hériter de LgControllerBase (ou porter [ApiController]).

Pour les modèles avec des propriétés imbriquées portant des DataAnnotations, activez UseValidationComplexModel="true" (le formulaire utilise alors un ObjectGraphDataAnnotationsValidator). Pour ajouter des erreurs métier par programme, utilisez LgValidator.

Soumission invalide et soumission brute​

OnInvalidSubmit est déclenché quand le modèle est invalide. OnSubmit court-circuite la validation automatique : vous êtes alors responsable d'appeler EditContext.Validate(). Ne combinez pas OnSubmit avec OnValidSubmit / OnInvalidSubmit.

AuditFormPage.razor
<LgEditForm Model="_model"
OnValidSubmit="OnValidSubmitAsync"
OnInvalidSubmit="OnInvalidSubmit">
<LgTextBox Label="#Reference" @bind-Value="_model.Reference" />
<LgButton Text="#Save" IsSubmit="true" />
</LgEditForm>
AuditFormPage.razor.cs
public partial class AuditFormPage : LgPage
{
private readonly AuditVm _model = new();

// Persiste le modèle valide.
private async Task OnValidSubmitAsync(EditContext editContext)
{
await Task.Delay(100);
ShowSuccess("#Saved");
}

// Trace les tentatives de soumission invalides (audit, télémétrie…).
private void OnInvalidSubmit(EditContext editContext)
{
ShowWarning("#FormInvalid");
}

private sealed class AuditVm
{
[Required]
public string Reference { get; set; }
}
}

Affichage des erreurs et des champs obligatoires​

ErrorsDisplayOptions choisit comment les erreurs sont présentées (message sous le champ, résumé, toastr…) ; à défaut, la configuration de comportement de l'application s'applique. ValidationErrorMessage remplace le message générique du toastr. RequiredInputDisplayMode pilote le marquage des champs obligatoires / optionnels.

OrderFormPage.razor
<LgEditForm Model="_model"
ErrorsDisplayOptions="EditFormErrorsDisplayOptions.InlineValidation | EditFormErrorsDisplayOptions.Summary"
RequiredInputDisplayMode="RequiredInputDisplayMode.MandatoryOnly"
ValidationErrorMessage="#OrderFormInvalid"
OnValidSubmit="OnValidSubmitAsync">
...
</LgEditForm>

Confirmation, touche Entrée et suivi des modifications​

ConfirmationMessage demande confirmation avant la soumission (c'est ici qu'il se place quand le bouton est en IsSubmit="true"). SubmitOnEnter (activé par défaut) soumet le formulaire sur la touche Entrée. IgnoreFormTracking exclut le formulaire du suivi des modifications (LgFormTracker), qui alerte sinon l'utilisateur en cas de fermeture avec des changements non enregistrés.

SettingsFormPage.razor
<LgEditForm Model="_model"
ConfirmationMessage="#ConfirmSaveSettings"
SubmitOnEnter="false"
IgnoreFormTracking="true"
OnValidSubmit="OnValidSubmitAsync">
...
</LgEditForm>

Propriétés​

Toutes les propriétés [Parameter] du composant.

NomTypeDéfautDéclaré dansDescription
AdditionalAttributesIReadOnlyDictionary<string, object>nullLgEditFormAttributs HTML additionnels appliqués à l'élément form.
ChildContentRenderFragment<EditContext>nullLgEditFormContenu du formulaire (l'EditContext est disponible en contexte).
ConfirmationMessagestringnullLgEditFormMessage de confirmation affiché avant la soumission.
CssClassstringnullLgEditFormClasses CSS additionnelles.
EditContextEditContextnullLgEditFormContexte d'édition fourni explicitement. Exclusif avec Model.
ErrorsDisplayOptionsEditFormErrorsDisplayOptions?nullLgEditFormMode d'affichage des erreurs de validation. Si null, la configuration de l'application s'applique.
IgnoreFormTrackingboolfalseLgEditFormExclut le formulaire du suivi des modifications.
ModelobjectnullLgEditFormModèle de premier niveau du formulaire (un EditContext est construit pour lui). Exclusif avec EditContext.
OnInvalidSubmitEventCallback<EditContext>—LgEditFormCallback déclenché à la soumission quand le modèle est invalide.
OnSubmitEventCallback<EditContext>—LgEditFormSoumission brute : la validation est alors à votre charge (EditContext.Validate()).
OnValidSubmitEventCallback<EditContext>—LgEditFormCallback déclenché à la soumission quand le modèle est valide.
RequiredInputDisplayModeRequiredInputDisplayMode?nullLgEditFormMode de marquage des champs obligatoires / optionnels. Si null, la configuration de l'application s'applique.
SubmitOnEnterbooltrueLgEditFormSoumet le formulaire sur la touche Entrée.
UseValidationComplexModelbool?nullLgEditFormActive la validation des propriétés imbriquées (ObjectGraphDataAnnotationsValidator).
ValidationErrorMessagestringnullLgEditFormRemplace le message d'erreur générique du toastr (#lgEditFormValidation).
Paramètres en cascade

LgEditForm consomme le FormTracker (LgFormTracker) fourni par un ancêtre pour le suivi des modifications — vous n'avez pas à le définir.

Événements​

ÉvénementTypeDescription
OnValidSubmitEventCallback<EditContext>À la soumission, quand le modèle est valide.
OnInvalidSubmitEventCallback<EditContext>À la soumission, quand le modèle est invalide.
OnSubmitEventCallback<EditContext>À la soumission, sans validation automatique.

Énumérations associées​

EditFormErrorsDisplayOptions​

Mode d'affichage des erreurs de validation (propriété ErrorsDisplayOptions). Énumération [Flags] : les valeurs se combinent (ex. InlineValidation | Summary).

ValeurDescription
NoneAucun message affiché.
ToastrGenericMessageMessage générique dans le toastr (option par défaut).
ToastrAllMessagesTous les messages de validation dans le toastr.
ToastrOnBlurMessage dans le toastr à la sortie de chaque champ.
SummaryRésumé des messages en tête de formulaire.
InlineValidationMessage sous chaque champ (option par défaut).

RequiredInputDisplayMode​

Marquage des champs obligatoires / optionnels (propriété RequiredInputDisplayMode).

ValeurDescription
NoneAucune indication.
OptionalOnlyIndication sur les champs optionnels.
MandatoryOnlyIndication sur les champs obligatoires.
BothIndication sur les deux.

Bonnes pratiques / accessibilité​

  • Posez les contraintes sur le vue-modèle (DataAnnotations) : elles portent la validation client et serveur, ainsi que les déductions des champs (Required, MaxLength).
  • Un seul mode de soumission : OnValidSubmit / OnInvalidSubmit ou OnSubmit, pas les deux.
  • ConfirmationMessage du formulaire est incompatible avec celui d'un bouton IsSubmit="true" : placez la confirmation sur le formulaire.
Référence complète

Tous les paramètres : Référence API — LgEditForm.

Composants liés​

Les champs de saisie de cette section : LgTextBox, LgSelect, LgCheckBox, LgCheckBoxList, LgRadioGroup, LgDateBox, LgMonthBox, LgWeekBox.

Pour ajouter des erreurs de validation personnalisées (règles métier, erreurs serveur) au formulaire : LgValidator.