Aller au contenu principal

16-3 Le TagHelper asp-for

L'erreur à l'étape précédente vient du fait que le modèle est null initialement et pour assigner des valeurs au champ, on utilise @Model.Email (par exemple).

En accédant à la propriété Email du modèle, si ce dernier est null, une erreur est lancée.

Un attribut asp-for existe pour les input et permet de régler trois problèmes à la fois:

  • Assigner un id automatiquement au champ
  • Assigner l'attribut name automatiquement
  • Assigner une valeur basée sur le modèle, sans générer d'erreur si le modèle est null.

Par exemple, pour le champ Courriel, on pourrait faire:

<form asp-controller="Auth" asp-action="Authentifier">
<div class="form-floating mb-3">
<input asp-for="Email" class="form-control"/>
<label asp-for="Email">Courriel</label>
</div>

<div class="form-floating mb-3">
<input type="password" id="passowrd" name="Password" value="@Model.Password" class="form-control"/>
<label for="passowrd">Mot de passe</label>
</div>

<div class="form-group">
<button class="btn btn-primary">Connexion</button>
</div>
</form>

Comparez avec password, voyez comme c'est plus simple!

Le fait d'utiliser cet attribut nous offre même l'autocomplétion:

img

On peut poursuivre et modifier la portion password du formulaire, en plus d'ajouter des Placeholder:

<form asp-controller="Auth" asp-action="Authentifier">
<div class="form-floating mb-3">
<input asp-for="Email" placeholder="Courriel" class="form-control"/>
<label asp-for="Email">Courriel</label>
</div>

<div class="form-floating mb-3">
<input type="password" asp-for="Password" placeholder="Mot de passe" class="form-control"/>
<label asp-for="Password">Mot de passe</label>
</div>

<div class="form-group">
<button class="btn btn-primary">Connexion</button>
</div>
</form>

C'est maintenant beaucoup plus propre, en plus de s'éviter plusieurs problèmes avec la gestion des valeurs nulles!

Test

Vous pouvez vous rendre à l'adresse /auth/connexion et vous devriez maintenant voir un formulaire ressemblant à ceci:

http://localhost:4200