none
MVC, validation et dropdownlist : comment faire lorsque la valeur de dropdown n'est pas "required" RRS feed

  • Question

  • Bonjour à tous,

    J'ai une page de création dans laquelle j'ai plusieurs champs texte et un dropdownlist.
    Ce dropdown a un item par défaut "selectionnez une valeur" en plus de ma liste d'éléments bindés
    Fonctionnellement j'aimerai que l'utilisateur puisse saisir ses champs et éventuellement choisir une valeur dans la dropdown mais ce n'est pas obligatoire.
    Lorsque je saisi mes infos et que je selectionne une valeur dans la dropdown, tout va bien mais lorsque je saisis mes infos et que je ne selectionne rien dans la dropdown, la validation du formulaire me bloque, comme si j'avais mis une regle required sur la propriété.
    Attention, pour les regles de validation, je n'utilise pas les DataAnnotations, tout est fait dans la couche service avec un modelstatewrapper.

    Sauriez vous comment désactiver la validation sur un dropdownlist ?
    Merci d'avance
    @+
    mercredi 6 janvier 2010 16:42

Réponses

  • Bonjour,

    Tout d'abord : je n'implémente pas Idataerrorinfo. Dans mon sujet j'ai pourtant indiqué que toutes mes validations se passaient au sein de ma couche service donc hors de mes DTO, donc forcement, pas de IDataErrorInfo.
    Ensuite, je voulais pouvoir débrayer ce message tout en conservant le validationsummary puisque j'y ai d'autres messages de validation à afficher, donc supprimer la ligne du validationsummary ne resoud pas le probleme.
    Enfin, l'utilisateur n'est pas obligé de choisir une valeur dans le dropdown, donc forcement s'il ne choisit rien, je ne veux pas de message d'erreur me disant qu'il n'a rien choisi.
    Je sais pas si c'est moi mais j'ai l'impression que tu as compris exactement l'inverse de ce que je cherchais en fait :P

    Bref, la solution à ce probleme est très simple :
    Pour permettre à l'utilisateur de ne pas choisir une valeur dans un dropdown (donc laisser la valeur de la propriété bindée à Null quand celle ci est un int) il suffit de déclarer la propriété en int? (nullable integer) et non en int tout court et là tout roule parfaitement.
    En fait, en MVC, si on souhaite ne pas mettre de valeur dans un champs, ou tout autre controle web bindé à une propriété, il faut que celle ci soit nullable (DateTime, int, bool ...)
    Vala vala :)

    Merci quand meme ;)
    • Marqué comme réponse insomniak49 mercredi 13 janvier 2010 14:22
    mercredi 13 janvier 2010 14:22

Toutes les réponses

  • Bonjour,
    Est-ce que la classe model bindé avec le dropdowlist implement l'interface ?

    verifie aussi que sur ta view que tu ne pas mis :

     

    <%= Html.ValidationSummary() %>

     

     




    dans le code ci dessous, si aucune valeur n'est selectionné, j'obtien un message d'erreur.

     
    public class DropDownModel: IDataErrorInfo
        {
          
     public string Selectedvalue{ get; set; }
    
            #region IDataErrorInfo Members
    
            string IDataErrorInfo.Error
            {
                ..... 
            }
    
            string IDataErrorInfo.this[string columnName]
            {
                 if ((propName == "Selectedvalue") && !Selectedvalue.HasValue)
                        return "Error!";
            }
    }

     




    mercredi 13 janvier 2010 13:38
  • Bonjour,

    Tout d'abord : je n'implémente pas Idataerrorinfo. Dans mon sujet j'ai pourtant indiqué que toutes mes validations se passaient au sein de ma couche service donc hors de mes DTO, donc forcement, pas de IDataErrorInfo.
    Ensuite, je voulais pouvoir débrayer ce message tout en conservant le validationsummary puisque j'y ai d'autres messages de validation à afficher, donc supprimer la ligne du validationsummary ne resoud pas le probleme.
    Enfin, l'utilisateur n'est pas obligé de choisir une valeur dans le dropdown, donc forcement s'il ne choisit rien, je ne veux pas de message d'erreur me disant qu'il n'a rien choisi.
    Je sais pas si c'est moi mais j'ai l'impression que tu as compris exactement l'inverse de ce que je cherchais en fait :P

    Bref, la solution à ce probleme est très simple :
    Pour permettre à l'utilisateur de ne pas choisir une valeur dans un dropdown (donc laisser la valeur de la propriété bindée à Null quand celle ci est un int) il suffit de déclarer la propriété en int? (nullable integer) et non en int tout court et là tout roule parfaitement.
    En fait, en MVC, si on souhaite ne pas mettre de valeur dans un champs, ou tout autre controle web bindé à une propriété, il faut que celle ci soit nullable (DateTime, int, bool ...)
    Vala vala :)

    Merci quand meme ;)
    • Marqué comme réponse insomniak49 mercredi 13 janvier 2010 14:22
    mercredi 13 janvier 2010 14:22