J'utilise des annotations de données pour la validation de modèle dans MVC4 et j'utilise actuellement StringLengthAttribute mais je ne veux PAS spécifier une valeur maximale (actuellement fixée à 50), mais je veux spécifier une valeur de longueur de chaîne minimale.
Existe-t-il un moyen de spécifier uniquement une longueur minimale? Peut-être un autre attribut que je peux utiliser?
Mon code actuel est:
[Required]
[DataType(DataType.Password)]
[Display(Name = "Confirm New Password")]
[StringLength(50, MinimumLength = 7)]
[CompareAttribute("NewPassword", ErrorMessage = "The New Password and Confirm New Password fields did not match.")]
public string ConfirmNewPassword { get; set; }
Toute aide est très appréciée.
Existe-t-il un moyen de spécifier uniquement une longueur minimale? Peut-être un autre attribut que je peux utiliser?
À l'aide de l'annotation de données standard, Non. Vous devez spécifier la longueur maximale. Seuls les autres paramètres sont facultatifs.
Dans un tel cas, je recommanderais quelque chose comme ceci:
[StringLength(int.MaxValue, MinimumLength = 7)]
Vous pouvez également utiliser un attribut Regex (expression régulière) comme celui-ci:
[RegularExpression(@"^(?:.*[a-z]){7,}$", ErrorMessage = "String length must be greater than or equal 7 characters.")]
Plus d'informations à ce sujet ici: Validation de la force du mot de passe avec des expressions régulières
Il existe également l'attribut [MinLength (7)] à cet effet.
Avez-vous pensé à supprimer les annotations de données et à ajouter un attribut Html à l'élément Html.TextBoxFor dans votre vue?
Devrait ressembler à quelque chose comme:
@Html.TextBoxFor(model => model.Full_Name, new { htmlAttributes = new { @class = "form-control", @minlength = "10" } })
ou
@Html.TextBoxFor(model => model.Full_Name, new { @class = "form-control", @minlength = "10" } })
10 étant la longueur minimale que vous choisissez.
J'aime ajouter des attributs html à ma vue car je peux voir rapidement son impact. sans gâcher votre base de données et ne nécessite pas d'exécuter des migrations et une mise à jour de la base de données si vous utilisez des migrations (première approche du code).
n'oubliez pas que lorsque vous changez EditorFor en TextBoxFor, vous perdrez votre style, mais cela devrait être une solution facile, encore une fois, vous pouvez simplement ajouter les styles à votre vue ou ajouter un style à votre fichier CSS.
J'espère que cela t'aides :)
Beau travail François, Il semble que vous ne puissiez pas utiliser d'annotations de données pour émettre un attribut maxlength sur le champ de saisie. Il fournit simplement une validation côté client. L'utilisation de maxlength avec des attributs HTML a créé le champ de saisie avec maxlength correctement défini.
@Html.EditorFor(model => model.Audit_Document_Action, new { htmlAttributes = new { @class = "form-control", @maxlength = "10" } })