29-2 Création (champs du formulaire)
La base de la page et du formulaire étant créée, on peut poursuivre l'avancement du formulaire.
Ajouter un champ inputText
(Nom)
Pour ajouter des champs input
, comme pour le nom, on utilise InputText
.
<div class="col-lg-6">
<EditForm Model="_creerEvenementDto" OnSubmit="GererSubmit">
<div class="form-floating mb-3">
<InputText id="nom" class="form-control" placeholder="Nom" @bind-Value="_creerEvenementDto.Nom"/>
<label asp-for="nom">Nom</label>
</div>
<button type="submit" class="btn btn-primary">Sauvegarder</button>
</EditForm>
</div>
InputText
est un composant propre à Blazor permettant d'ajouter un champinput
au formulaire.@bind-Value
est utilisé pour faire le lien entre leinput
et la propriété du modèle associée. C'est pourquoi ici onbind
ce champs à la propriétéNom
deCreerEvenementDto
.
Ajouter un champ InputTextArea
(Description)
Le principe est sensiblement le même pour la description (TextArea
). On utilise cependant InputTextArea
.
<!-- ... -->
<div class="col-lg-6">
<EditForm Model="_creerEvenementDto" OnSubmit="GererSubmit">
<div class="form-floating mb-3">
<InputText id="nom" class="form-control" placeholder="Nom" @bind-Value="_creerEvenementDto.Nom"/>
<label asp-for="nom">Nom</label>
</div>
<div class="form-floating mb-3">
<InputTextArea id="description" rows="5" class="form-control" placeholder="Description" @bind-Value="_creerEvenementDto.Description"/>
<label asp-for="description">Description</label>
</div>
<button type="submit" class="btn btn-primary">Sauvegarder</button>
</EditForm>
</div>
<!-- ... -->
Ajouter un champ InputNumber
(Capacité)
Pour les chiffres, comme la capacité, on peut utiliser InputNumber
.
<!-- ... -->
<div class="col-lg-6">
<EditForm Model="_creerEvenementDto" OnSubmit="GererSubmit">
<div class="form-floating mb-3">
<InputText id="nom" class="form-control" placeholder="Nom" @bind-Value="_creerEvenementDto.Nom"/>
<label asp-for="nom">Nom</label>
</div>
<div class="form-floating mb-3">
<InputTextArea id="description" rows="5" class="form-control" placeholder="Description" @bind-Value="_creerEvenementDto.Description"/>
<label asp-for="description">Description</label>
</div>
<div class="form-floating mb-3">
<InputNumber id="capacite" class="form-control" placeholder="Capacité" @bind-Value="_creerEvenementDto.Capacite"/>
<label asp-for="capacite">Capacité</label>
</div>
<button type="submit" class="btn btn-primary">Sauvegarder</button>
</EditForm>
</div>
<!-- ... -->
Ajout d'un champ InputDate
(Date)
Pour les dates, InputDate
est tout désigné!
<!-- ... -->
<div class="col-lg-6">
<EditForm Model="_creerEvenementDto" OnSubmit="GererSubmit">
<div class="form-floating mb-3">
<InputText id="nom" class="form-control" placeholder="Nom" @bind-Value="_creerEvenementDto.Nom"/>
<label asp-for="nom">Nom</label>
</div>
<div class="form-floating mb-3">
<InputTextArea id="description" rows="5" class="form-control" placeholder="Description" @bind-Value="_creerEvenementDto.Description"/>
<label asp-for="description">Description</label>
</div>
<div class="form-floating mb-3">
<InputNumber id="capacite" class="form-control" placeholder="Capacité" @bind-Value="_creerEvenementDto.Capacite"/>
<label asp-for="capacite">Capacité</label>
</div>
<div class="form-floating mb-3">
<InputDate id="date" class="form-control" placeholder="Date" @bind-Value="_creerEvenementDto.Date"/>
<label asp-for="date">Date</label>
</div>
<button type="submit" class="btn btn-primary">Sauvegarder</button>
</EditForm>
</div>
<!-- ... -->
Vous remarquerez que la date par défaut est la suivante:
Ce qui est un peu étrange j'en conviens!
Pour pallier à cette situation, il est possible d'assigner au DTO une valeur par défaut.
public DateTime Date { get; set; } = DateTime.Now;
Le champ aura maintenant la valeur d'aujourd'hui comme valeur par défaut, ce qui est un meilleur point de départ!
Ajouter un champ InputNumber
(Prix)
Tout comme pour la capacité, un InputNumber
peut être utilisé pour le prix.
<!-- ... -->
<div class="col-lg-6">
<EditForm Model="_creerEvenementDto" OnSubmit="GererSubmit">
<div class="form-floating mb-3">
<InputText id="nom" class="form-control" placeholder="Nom" @bind-Value="_creerEvenementDto.Nom"/>
<label asp-for="nom">Nom</label>
</div>
<div class="form-floating mb-3">
<InputTextArea id="description" rows="5" class="form-control" placeholder="Description" @bind-Value="_creerEvenementDto.Description"/>
<label asp-for="description">Description</label>
</div>
<div class="form-floating mb-3">
<InputNumber id="capacite" class="form-control" placeholder="Capacité" @bind-Value="_creerEvenementDto.Capacite"/>
<label asp-for="capacite">Capacité</label>
</div>
<div class="form-floating mb-3">
<InputDate id="date" class="form-control" placeholder="Date" @bind-Value="_creerEvenementDto.Date"/>
<label asp-for="date">Date</label>
</div>
<div class="form-floating mb-3">
<InputNumber id="prix" class="form-control" placeholder="Prix" @bind-Value="_creerEvenementDto.Prix"/>
<label asp-for="prix">Prix</label>
</div>
<button type="submit" class="btn btn-primary">Sauvegarder</button>
</EditForm>
</div>
<!-- ... -->
Ajouter un champ InputSelect
(Ville)
Pour sélectionner la ville, on doit faire un choix à partir d'une liste prédéfinie. Une boîte de sélection Select
est donc tout indiquée pour cette tâche.
<!-- ... -->
<div class="col-lg-6">
<EditForm Model="_creerEvenementDto" OnSubmit="GererSubmit">
<div class="form-floating mb-3">
<InputText id="nom" class="form-control" placeholder="Nom" @bind-Value="_creerEvenementDto.Nom"/>
<label asp-for="nom">Nom</label>
</div>
<div class="form-floating mb-3">
<InputTextArea id="description" rows="5" class="form-control" placeholder="Description" @bind-Value="_creerEvenementDto.Description"/>
<label asp-for="description">Description</label>
</div>
<div class="form-floating mb-3">
<InputNumber id="capacite" class="form-control" placeholder="Capacité" @bind-Value="_creerEvenementDto.Capacite"/>
<label asp-for="capacite">Capacité</label>
</div>
<div class="form-floating mb-3">
<InputDate id="date" class="form-control" placeholder="Date" @bind-Value="_creerEvenementDto.Date"/>
<label asp-for="date">Date</label>
</div>
<div class="form-floating mb-3">
<InputNumber id="prix" class="form-control" placeholder="Prix" @bind-Value="_creerEvenementDto.Prix"/>
<label asp-for="prix">Prix</label>
</div>
<div class="form-floating mb-3">
<InputSelect id="ville" class="form-select" @bind-Value="_creerEvenementDto.VilleId">
<option value="">Veuillez faire une sélection</option>
</InputSelect>
<label for="ville">Ville</label>
</div>
<button type="submit" class="btn btn-primary">Sauvegarder</button>
</EditForm>
</div>
<!-- ... -->
Peut-être remarquez-vous, si vous vérifiez que le formulaire s'affiche correctement, que l'option par défaut pour la ville, soit Veuillez faire une sélection
n'est pas sélectionnée.
La raison est que la valeur par défaut assignée à un int
(VilleId
) est 0
et non null
. Pour permettre null
, on doit mettre la propriété optionnelle dans le DTO via ?
.
public int? VilleId { get; set; }
Une fois cette modification faite, le champ select
aura comme valeur par défaut Veuillez faire une sélection
.
La validation [required]
s'occupera de gérer que la valeur reçue n'est pas null.
Test
Vous pouvez tester que le tout s'affiche correctement. Évidemment, vous ne pourrez soumettre le formulaire, mais à tout de moins valider que l'affichage fonctionne.
Cependant, le select
ne contient pas de villes... comment les afficher?
Puisque ces dernières proviennent de la base de données, un appel d'API sera nécessaire.
C'est ce que nous verrons à la prochaine étape!