IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

[SL3] Customiser le message "L'entrée n'est pas dans un format correct"


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut [SL3] Customiser le message "L'entrée n'est pas dans un format correct"
    Bonjour tout le monde

    Dans mon model, j'ai la propriété suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [Required(ErrorMessage = "Veuillez spécifier une valeur")]
            [Range(0,10000000, ErrorMessage = "La valeur doit etre comprise entre 0 et 10M")]
            public int Notional
            {
                get { return notional; }
                set
                {
                    Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Notional" });
                    notional = value;
     
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Notional"));
                    }
                }
            }
    Dans ma View, j'ai une textbox bindée dessus.

    1- Quand je saisis une lettre dans la textbox, j'ai le message "L'entrée n'est pas dans un format correct". J'aimerais plutôt afficher un truc dans le genre "Valeur numérique attendue". Comment faire?
    2- Quand je mets rien dans ma textbox, j'ai le même message. Comment faire pour que ce soit le message associé à mon Required qui s'affiche?

    Thx

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    J'ai eu le même soucis y'a pas longtemps. En fait ça vient du converter interne utilisé pour passer de string à int.

    Me semble que la solution est d'utiliser ton propre converter pour passer de string à int.

  3. #3
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Tu peux aussi utiliser une texbox qui n'accepte que des nombres en entrée.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Hmmm, ok, le converter je vois ce que c'est.
    Mais j'ai du mal à voir comment lier ça aux messages d'erreurs définis dans mes DataAnnotations

  5. #5
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    Hmmm, ok, le converter je vois ce que c'est.
    Mais j'ai du mal à voir comment lier ça aux messages d'erreurs définis dans mes DataAnnotations
    L'erreur vient de l'exception jeté par le converter (int.Parse ?).
    Toi ce que tu peux faire c'est retourner string.Empty qui sera refusé par ton Required.

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <UserControl.Resources>
            <conv:StringToIntConverter x:Key="myStringToIntConverter"></conv:StringToIntConverter>
        </UserControl.Resources>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <TextBox
                        x:Name="notional"
                        Width="150"
                        Text="{Binding Notional, Mode=TwoWay, ValidatesOnExceptions=true, Converter={StaticResource myStringToIntConverter}}" 
                        />
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class StringToIntConverter : IValueConverter
        {
            #region IValueConverter Members
     
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                if (string.IsNullOrEmpty(value.ToString()))
                    return string.Empty;
     
                int res;
                if (int.TryParse(value.ToString(), out res))
                    return res;
     
                return value;
            }
     
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                return value;
            }
     
            #endregion
        }
    En debug, si je mets rien dans ma textbox, je passe pas dans le Converter. Silverlight balance le message format incorrect avant

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Par défaut
    Bonjour,

    J'ai exactement le même problème.

    Je passe par mon converter au 1er chargement, et après je ne passe plus dedans. J'ai donc le même message :
    L'entrée n'est pas dans un format correct
    Si je vide mon textbox (donc valeur à null), le message reste présent, alors que j'utilise un int? .
    On dirait qu'il n'interprète le type nullable.

    Si je trouve la solution, je reviendrai vers toi.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Par défaut
    J'ai trouvé une solution détournée...
    En fait, au lieu de mettre un int, je mets une string. Voici un bout du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
            private string nbFiches;
     
            [Required(ErrorMessage = "Saisie obligatoire")]
            [RegularExpression("^[0-9]{3}$", ErrorMessage = "Votre nombre ne doit pas contenir de lettre et doit être compris entre 1 et 99")]
            [Display(Name = "Nb fiches ", Description = "Nombre de fiches à insérer")]
            public string NbFiches
            { 
                get
                {
                    return nbFiches;
                }
                set 
                {
                    Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "NbFiches" });
                    nbFiches = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("NbFiches"));
                    }
                } 
            }
    Je n'est donc plus besoin du converter,
    par contre il faudra quand même parser en int plus tard.

    Je ne sais pas si ça répond exactement à ton problème, mais c'est toujours une possibilité....

  9. #9
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Perso j'aime pas
    Ma propriété est de type int, je vais pas la déclarer en string pour faire fonctionner un Required

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Par défaut
    Bonjour,
    J'avoue que ce n'est pas terrible comme détour.

    Une autre solution est de seulement mettre ton accesseur en string, et de laisser ta propriété en int, du moins en int? ou <nullable>int :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    private int? nbFiches;
     
            [Required(ErrorMessage = "Saisie obligatoire")]
            [Range(1,99, ErrorMessage="Le nombre doit être compris entre 1 et 99")]
            [RegularExpression("^[0-9]{1,2}$", ErrorMessage = "Vous devez rentrer un nombre")]
            [Display(Name = "Nb fiches ", Description = "Nombre de fiches à insérer")]
            public string NbFiches
            { 
                get
                {
                    return nbFiches.ToString();
                }
                set 
                {
                    Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "NbFiches" });
     
                    if (value==null)
                    {
                        nbFiches = null;
                    }
                    else
                    {
                        nbFiches = int.Parse(value);
                    }
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("NbFiches"));
                    }
                } 
            }
    Peut-être est-ce que ça te convient mieux...

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/05/2012, 23h46
  2. Réponses: 7
    Dernier message: 01/06/2011, 12h41
  3. Réponses: 0
    Dernier message: 18/01/2011, 10h01
  4. erreur keytool l'entrée n'est pas un certificat X.509
    Par safi11 dans le forum Général Java
    Réponses: 1
    Dernier message: 04/01/2011, 17h16
  5. Réponses: 1
    Dernier message: 21/02/2008, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo