Attribut MaxLength de ne pas générer de validation côté client attributs
J'ai un curieux problème avec ASP.NET MVC3 la validation côté client. J'ai la classe suivante:
public class Instrument : BaseObject
{
public int Id { get; set; }
[Required(ErrorMessage = "Name is required.")]
[MaxLength(40, ErrorMessage = "Name cannot be longer than 40 characters.")]
public string Name { get; set; }
}
De mon point de vue:
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
Et voici le code HTML généré-je obtenir pour la zone de texte pour ce domaine:
<input class="text-box single-line" data-val="true" data-val-required="Name is required." id="Name" name="Name" type="text" value="">
Aucun signe de la MaxLengthAttribute
, mais tout le reste semble fonctionner.
Toutes les idées ce qui ne va pas?
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser le
[StringLength]
attribut:C'est pour des fins de validation. Si vous souhaitez définir par exemple l'attribut maxlength sur l'entrée que vous pourriez écrire un personnalisé annotations de données fournisseur de métadonnées comme indiqué dans ce post et de personnaliser le les modèles par défaut.
int.MaxValue
max longueur et ensuite définir la MinLength propriété quelle que soit la longueur minimale dont vous avez besoin. Alors, non, ce n'est pas seulement une fonctionnelle de la solution de contournement. C'est celui qui fonctionne dans la pratique ainsi.int.MaxValue
vous spécifiez une longueur max, parce que vous devez. Bien que fonctionnellement identiques, vous êtes maintenant en spécifiant explicitement quelque chose que vous n'auriez pas à avecMinLength
etMaxLength
. Cela ne résout pas le problème de la validation de l'attribut n'est pas de valider correctement, et la plupart des gens trouvent cela la manière dure.J'ai juste utilisé un extrait de jquery pour résoudre ce problème.
Le sélecteur trouve tous les éléments qui ont un data-val-longueur max de l'ensemble d'attributs. C'est l'attribut qui le StringLength validation de l'attribut défini.
La chaque boucle boucles à travers ces matches et d'analyser la valeur de cet attribut et de l'affecter à la mxlength propriété qui doit avoir été définie.
Viens de l'ajouter à votre document prêt à fonctionner et vous êtes bon pour aller.
MaxLengthAttribute
travaille depuis MVC 5.1 mise à jour: modifier les notesmaxlength
attribut à lainput
élément.MVC 4
Si vous voulez maxlenght dans le type de saisie de texte ? Vous pouvez !
Accessoires @Nick-Harrison sa réponse:
Je me demandais ce que parseInt() est de là? J'ai simplifié à cela pas de problèmes...
J'aurais commenté sur les Pseudos de réponse, mais n'ont pas assez de représentants.
J'ai eu ce même problème et j'ai été capable de le résoudre par la mise en œuvre de la Ivalidatableobjet interface de mon point de vue modèle.
Le balisage dans le Rasoir est alors...
Cela fonctionne vraiment bien. Si je tente de l'utiliser [StringLength] au lieu ensuite, le rendu HTML est tout simplement pas correct. La validation doit s'afficher comme:
Avec le StringLengthAttribute le rendu HTML s'affiche comme un ValidationSummary qui n'est pas correct. Le plus drôle, c'est que lorsque le programme de validation échoue, le soumettre est toujours bloqué!
StringLength
fonctionne très bien, je l'ai utilisé de cette façon:ou suffit d'Utiliser
RegularExpression
sans StringLength:mais pour moi, au-dessus de méthodes ont donné d'erreur dans l'affichage de la vue, parce que j'avais déjà ProductName champ dans la base de données qui a plus de 25 personnages
donc finalement je suis tombé sur cette et cette post et a essayé de valider sans modèle comme celui-ci:
cela a résolu mon problème, vous pouvez également faire de la validation manuellement à l'aide de jquery ou à l'aide de ModelState.AddModelError
espoir aide à quelqu'un.
Je sais je suis très en retard à la fête, mais j'ai enfin trouvé comment nous pouvons enregistrer le
MaxLengthAttribute
.Nous avons d'abord besoin d'un programme de validation:
Rien de vraiment spécial. Dans le constructeur nous sauver certaines valeurs de l'attribut. Dans le
GetClientValidationRules
nous avons fixé une règle.ValidationType = "length"
est mappé àdata-val-length
par le cadre.rule.ValidationParameters["max"]
est pour ledata-val-length-max
attribut.Maintenant, puisque vous avez un validateur, vous avez seulement besoin de l'enregistrer dans le
global.asax
:Et voila, ça fonctionne, tout simplement.
J'ai essayé ce pour toutes les entrées dans mon document html(textarea,entrées,etc) qui avaient des données-val-longueur max de la propriété et qu'il fonctionne correctement.
Ce qui peut remplacer le MaxLength et la MinLength