2010-11-01 13 views
1

Je développe une application ASP.NET MVC2 dans lequel j'ai une classe utilisateur avec une propriété nommée SecurityQuestionID comme suit:RangeAttribute données Annotation ne fonctionne pas comme prévu

public class User 
    { 
     [RangeAttribute(1, 5, ErrorMessage = "Security Question is required")] 
     [DisplayName("Security Question")] 
     public virtual int SecurityQuestionID { get; set; } 
    } 

Le champ SecurityQuestionID se peuplé d'un menu déroulant dans la vue comme suit:

<%: Html.LabelFor(model => model.SecurityQuestionID)%> 
    <%: Html.DropDownListFor(model => model.SecurityQuestionID, ViewData["securityQuestions"] as SelectList,"Choose a Question",null) %> 
    <%: Html.ValidationMessageFor(model => model.SecurityQuestionID)%> 

le contrôleur envoie les questions de sécurité à la vue en utilisant des données de vue comme suit:

ViewData["securityQuestions"] = new SelectList(_securityQuestionService.GetAll(), "SecurityQuestionID", "Question"); 

Si je ne sélectionne pas une question dans la liste déroulante et que je clique sur le bouton Soumettre, alors Le champ Question de sécurité est requis. Un message s'affiche à la place de Sécurité Question requise. Quelqu'un peut-il m'aider à comprendre ce que je fais de mal ici?

Répondre

4

Si l'entier n'est pas NULL, il est requis par défaut. La validation de la gamme n'échoue donc pas, mais la validation requise échoue.
Vous pouvez spécifier un message d'erreur distinct pour le moment où il est requis en ajoutant un attribut requis.

[Required(ErrorMessage="Security Question is required")] 
2

Il s'agit probablement d'une erreur car il s'agit d'un champ obligatoire. Voir http://forums.asp.net/p/1391688/2977493.aspx. Ceci est cohérent avec le fait que le champ en question est défini comme int, et non comme int?, donc il ne peut pas supposer une valeur null. En d'autres termes, il n'atteint pas votre validateur de portée.