MVC 3 Validation - afficher Uniquement les messages d'erreur après avoir perdu le focus ou de les soumettre?
Que j'ai mis les entités dans mon MVC 3 app avec DataAnnotations (obligatoire, stringlength, etc) et le MVC page montre des messages d'erreur de validation de façon appropriée. Mais, les messages d'erreur sont affichés dès que la page se charge sur une nouvelle forme avant que l'utilisateur a eu la chance d'entrer une valeur non valide.
J'avais utilisé JQuery validation il y a quelques années et a été en mesure d'afficher uniquement les messages d'erreur après que l'utilisateur a perdu le focus sur un champ ou une tentative de soumettre le formulaire. En fait, je pense que c'était le comportement par défaut.
Est-il de toute façon de faire de même dans MVC 3 à l'aide de DataAnnotations?
EDIT: Voici le code HTML
<div class="form horizontal floated w50p">
<h3>Billing Information</h3>
@using(Html.BeginForm()){
<div class="item">
<div class="label">
<label>* First Name</label></div>
<div class="value">@Html.TextBoxFor(x => x.Name)</div>
<div class="value">@Html.ValidationMessageFor(x => x.Name)</div>
</div>
<div class="item">
<div class="label">
<label>* Address 1</label></div>
<div class="value">@Html.TextBoxFor(x => x.Street1)</div>
<div class="value">@Html.ValidationMessageFor(x => x.Street1)</div>
</div>
<div class="item">
<div class="label">
<label>Address 2</label></div>
<div class="value">@Html.TextBoxFor(x => x.Street2)</div>
</div>
<div class="item">
<div class="label">
<label>Address 3</label></div>
<div class="value">@Html.TextBoxFor(x => x.Street3)</div>
</div>
<div class="item">
<div class="label">
<label>City</label></div>
<div class="value">@Html.TextBoxFor(x => x.City)</div>
<div class="value">@Html.ValidationMessageFor(x => x.City)</div>
</div>
<div class="item">
<div class="label">
<label>State/Province/Region</label></div>
<div class="value">@Html.TextBoxFor(x => x.StateProv)</div>
<div class="value">@Html.ValidationMessageFor(x => x.StateProv)</div>
</div>
<div class="item">
<div class="label">
<label>Zip / Postal Code</label></div>
<div class="value">@Html.TextBoxFor(x => x.PostalCode)</div>
<div class="value">@Html.ValidationMessageFor(x => x.PostalCode)</div>
</div>
<div class="item">
<div class="label">
<label>* Contact Phone</label></div>
<div class="value">@Html.TextBoxFor(x => x.ContactPhone)</div>
<div class="value">@Html.ValidationMessageFor(x => x.ContactPhone)</div>
</div> <input type="submit" value="Submit" />
}
OriginalL'auteur chief7 | 2011-05-18
Vous devez vous connecter pour publier un commentaire.
Le comportement par défaut est exactement ce que vous décrivez (les erreurs ne doivent apparaître qu'après un champ perd le focus ou le formulaire est soumis). Donc, il doit y avoir quelque chose de mal avec votre point de vue ou de la manette. Plus précisément, il semble que le validateur pense que l'utilisateur est une publication, même sur le premier point de vue de la forme. Le premier point de vue de la forme que devrait être un
GET
pas unPOST
. Si vous collez votre code de contrôleur, qui pourraient nous aider à diagnostiquer mieux.J'ai vérifié et le RequestType est un "GET" dans le contrôleur de l'action quand la page se charge tout d'abord. Ensuite, un "POST" quand le formulaire est valide et soumis.
Pas sûr ce qui a changé, mais son travail maintenant.
OriginalL'auteur devuxer
Tu veux dire permettant la validation du client? Bien sûr, c'est facile. Juste:
Donc, nous allons aller de l'avant et de suivre ces étapes.
Modèle de vue:
Contrôleur:
Vue:
Maintenant, laissez le champ vide et validation du client déclenche en supposant qu'il est activé dans
web.config
(qui est par défaut lorsque vous créez un nouveau ASP.NET MVC 3 projet à l'aide de la valeur par défaut de Visual Studio modèle):Si vous souhaitez gérer personnalisé attributs de validation que vous pourriez, mais il pourrait être un peu plus douloureux. Et une fois que vous obtenez vous-même confronté à des applications du monde réel et de réaliser les faiblesses de déclaratif de validation à l'aide d'attributs (données annotations) je vous recommandons fortement de vérifier FluentValidation.NET.
prenons la suite de cas très commun: imaginez que vous avez une certaine forme contenant une case à cocher. Selon que la case à cocher est sélectionnée, vous devez vous assurer que certaines autres propriétés du modèle sont nécessaires. Si la case n'est pas cochée ces propriétés ne devrait pas être nécessaire. De le faire avec déclarative des données d'attributs d'annotation semble un peu moche.
ne serait pas le Ivalidatableobjet mieux travailler pour que le scénario au lieu de DataAnnotation attributs?
Scénario qui faites-vous allusion?
OriginalL'auteur Darin Dimitrov