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

ASP.NET Discussion :

Redirection vers une page en fonction du rôle de l'utilisateur, après login


Sujet :

ASP.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Redirection vers une page en fonction du rôle de l'utilisateur, après login
    Bonjour,

    J'ai fait pas mal de recherches et je suis toujours bloqué;

    sur la page aspx, j'ai :
    Code ASPX : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Login ID="Login1" runat="server" OnAuthenticate="Login1_Authenticate" >

    et en behind

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
            {
     
                if (Roles.IsUserInRole("joggeur"))
                {
                    Response.Redirect("~/joggeur/runSearch.aspx");
                }
                else
                {
                    Response.Redirect("~/organisateur/organisateurLogged.aspx");
                }
            }

    En fonction du rôle, je redirige mais j'arrive toujours à la page organisateur, or les users/roles sont bons dans la DB, j'ai essayé User.IsInRole, même pas la classe HttpContext, rien y fait.
    Une idée?

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    2 points a verifier :
    1 - Est-ce que le role "joggeur" est ecrit exactement comme ceci dans la DB ? Il me semble que le role sensible a la casse (i.e. joggeur != Joggeur != JOGGEUR) ?
    2 - Est-ce que tu as bien une entree dans la table de jointure AspNetUserRoles pour ton utilisateur et ton role ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    2 points a verifier :
    1 - Est-ce que le role "joggeur" est ecrit exactement comme ceci dans la DB ? Il me semble que le role sensible a la casse (i.e. joggeur != Joggeur != JOGGEUR) ?
    2 - Est-ce que tu as bien une entree dans la table de jointure AspNetUserRoles pour ton utilisateur et ton role ?
    1- Oui, les rôles sont créés dans l'administration d'ASP.net car j'utilise les membership pour la sécurité, c'est bien "joggeur" en français et en minuscules
    2 - Oui, j'ai bien l'association de uid du user avec l'uid du rôle dans la table asp_net.UserInRoles

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Etrange. Just avant la ligne if (Roles.IsUserInRole("joggeur")), ajoute ceci :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    var user = HttpContext.Current.User;
    Met un point d'arret sur cette ligne.

    - Regarde dans la propriete Roles : est-ce que tu vois le role "joggeur" ?
    - Est-ce que la propriete IsAuthenticated = true ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Etrange. Just avant la ligne if (Roles.IsUserInRole("joggeur")), ajoute ceci :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    var user = HttpContext.Current.User;
    Met un point d'arret sur cette ligne.

    - Regarde dans la propriete Roles : est-ce que tu vois le role "joggeur" ?
    - Est-ce que la propriete IsAuthenticated = true ?
    Alors, j'ai déjà recréé une page login.aspx et le control login car il retournait "la connexion a échoué" comme si le mot de passe était incorrect (ce qui est faux bien sûr), on sait maintenant se logger et accéder à la page "joggeur" mais étrangement, quand je me logge avec un compte "organisateur", il me charge quand même la page "joggeur" !?! Exactement, l'inverse d'avant...

    J'ai mis un point d'arrêt sur la var user et lancé en débogage :
    dans les variables locales en bas à gauche (VS2012), dans e, Authenticated: false et dans user null

    Je me demande si ce n'est pas le membership qui déconne, pourtant à la création des comptes, tout va bien...

    Pour info, c'est un pour TFE, le site est ligne, si vous voulez l'adresse et que je peux la poster ici, pas de souci. Merci déjà pour l'aide

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Ok, effectivement c'est probablement un souci avec le membership, surtout si Authenticated reste a false...

    Quelle version du Framework utilises-tu pour ce projet ?
    Peux-tu confirmer quelle version d'ASP.NET utilises-tu (WebForms / WebAPI / MVC...) ?

    Depuis quelques annees deja le membership n'est plus utilise, il a ete remplace par ASP.NET Identity.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Ok, effectivement c'est probablement un souci avec le membership, surtout si Authenticated reste a false...

    Quelle version du Framework utilises-tu pour ce projet ?
    Peux-tu confirmer quelle version d'ASP.NET utilises-tu (WebForms / WebAPI / MVC...) ?

    Depuis quelques annees deja le membership n'est plus utilise, il a ete remplace par ASP.NET Identity.
    .NET framework 4.5
    EntityFramework 5.0.0
    ASP.NET version 2.0 (site d'administration configuration ASP.net) mais 4.0 dans assembly/propriété references System.Web.DynamicData
    j'ai trouvé ça aussi dans le "A propos" de VS2012:
    ASP.NET and Web Tools 2012.3.41009

    J'utilise des contentPage sur une masterPage, pas de WebAPI, ni d'MVC, je programme en architecture 3 tiers (DAL/BLL/PL).

    Pour les membership, je sais que c'est vieux mais il gère les tables lui-même dans la DB, enfin, il paraît que c'est plus facile, c'est ce qu'on a vu au cours...

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par philousti88 Voir le message
    .NET framework 4.5
    EntityFramework 5.0.0
    ASP.NET version 2.0 (site d'administration configuration ASP.net) mais 4.0 dans assembly/propriété references System.Web.DynamicData
    j'ai trouvé ça aussi dans le "A propos" de VS2012:
    ASP.NET and Web Tools 2012.3.41009

    J'utilise des contentPage sur une masterPage, pas de WebAPI, ni d'MVC, je programme en architecture 3 tiers (DAL/BLL/PL).

    Pour les membership, je sais que c'est vieux mais il gère les tables lui-même dans la DB, enfin, il paraît que c'est plus facile, c'est ce qu'on a vu au cours...
    J'ai remis le code dans l'event "loggedIn" et là, ça fonctionne. Mais bon, j'ai quand même dû recréer une page login avant, j'ai peur que ça se rebug après, voire le jour de ma présentation
    Que me conseilleriez-vous de plus récent mais sans devoir recoder tout ce que j'ai déjà fait (je le passe le 18-11-17) ?

    Encore merci

  9. #9
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Arf effectivement, je n'avais pas fait attention a cela, tu n'etais pas dans le bon gestionnaire d'evenement. Si ca fonctionne maintenant il n'y a pas de raison que ca change du jour au lendemain

    Membership est l'ancetre d'ASP.NET Identity. En gros, ASP.NET Identity est plus adapte aux scenarios d'authentification modernes avec des claims, des tokens (SAML, SSO...) et de l'authentification via des services tiers (Facebook, Google, etc.). Ca gere aussi la structure de la DB. Membership est plus rigide puisqu'il ne gere que les roles et les noms d'utilisateurs (pas de claims et tout ca).

    Donc tu peux rester sur le membership si c'est juste pour un exam, ca t'evitera de rajouter de la complexite. Bon courage !
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    OK, merci beaucoup.

    - La version ancienne de l'ASP.net explique que le Regex pour la propriété ValidationExpression du contrôle RegularExpressionValidator d'un email n'accepte que "\w+@\w+\.\w+" et pas " \w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ?
    - le fait que le dossier de travail est un dossier synchronisé (googledrive) occasionnerait des bugs au lancement de l'appli? Je n'ai pas toujours les mêmes erreurs quand je lance en local (la DB est sur un serveur distant) et quand je teste en ligne, une fois publié...

  11. #11
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par philousti88 Voir le message
    La version ancienne de l'ASP.net explique que le Regex pour la propriété ValidationExpression du contrôle RegularExpressionValidator d'un email n'accepte que "\w+@\w+\.\w+" et pas " \w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ?
    Probablement. Mais j'imagine qu'il doit y avoir un moyen de remplacer la regex.

    Citation Envoyé par philousti88 Voir le message
    le fait que le dossier de travail est un dossier synchronisé (googledrive) occasionnerait des bugs au lancement de l'appli? Je n'ai pas toujours les mêmes erreurs quand je lance en local (la DB est sur un serveur distant) et quand je teste en ligne, une fois publié...
    Je ne connais pas en details la mecanique de Google Drive, mais il est possible qu'il place des locks sur les fichiers lors de la synchro (qui en principe se declenche des qu'une mise a jour est detectee). Donc oui, c'est possible que ca pose des problemes. Tu devrais utiliser un vrai gestionnaire de code source comme Visual Studio Team Services (VSTS) (gratuit).
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Probablement. Mais j'imagine qu'il doit y avoir un moyen de remplacer la regex..

    Je ne connais pas en details la mecanique de Google Drive, mais il est possible qu'il place des locks sur les fichiers lors de la synchro (qui en principe se declenche des qu'une mise a jour est detectee). Donc oui, c'est possible que ca pose des problemes. Tu devrais utiliser un vrai gestionnaire de code source comme Visual Studio Team Services (VSTS) (gratuit).
    - Mon asp.net est bien en 4.5, est-ce vraiment normal qu'il ne comprend pas ce regex, qui n'est pas pourtant pas si compliqué et surtout proposé par VS lui-même dans les propriétés du contrôle ? Remplacer la regex: créer une procédure en code behind? (ce serait quand même bien triste en sachant que la propriété existe).

    - ça a l'air bien VSTS mais c'est une version d'essai qui est gratuite et surtout je code avec un VS2012 ultimate venant de l'école (je ne sais pas s'il est "pirate" ou officiel et qu'il peut s'utiliser par x personnes), je veux être sûr que mon site ne sera pas plombé par que Microsoft a snifé une version "pirate"...

    Encore merci pour ton aide

  13. #13
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par philousti88 Voir le message
    - Mon asp.net est bien en 4.5, est-ce vraiment normal qu'il ne comprend pas ce regex, qui n'est pas pourtant pas si compliqué et surtout proposé par VS lui-même dans les propriétés du contrôle ? Remplacer la regex: créer une procédure en code behind? (ce serait quand même bien triste en sachant que la propriété existe).
    Tu n'as pas precise comment tu utilises ca, donc je ne peux pas t'aider precisement. En tout cas ce qui est sur c'est que la regex proposee par Microsoft n'accepte pas certaines adresses mail pourtant valides.

    Si tu utilises le controle, tu peux faire comme ceci :
    Code ASPX : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:RegularExpressionValidator ID="regexEmailValid" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ControlToValidate="tbEmail" ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator>
    Il suffit de remplacer la regex dans la propriete ValidationExpression.

    Tu peux aussi developper ton propre validateur :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [ToolboxData("<{0}:EmailValidator runat=server></{0}:EmailValidator>")]
    public class EmailValidator : BaseValidator
    {
        protected override bool EvaluateIsValid()
        {
            var val = this.GetControlValidationValue(this.ControlToValidate);
            var pattern = @"^[a-z][a-z|0-9|]*([_][a-z|0-9]+)*([.][a-z|0-9]+([_][a-z|0-9]+)*)?@[a-z][a-z|0-9|]*\.([a-z][a-z|0-9]*(\.[a-z][a-z|0-9]*)?)$";
            var match = Regex.Match(val.Trim(), pattern, RegexOptions.IgnoreCase);
     
            return match.Success;
        }
    }
    Idem, remplace pattern avec la regex que tu souhaites utiliser.

    Citation Envoyé par philousti88 Voir le message
    ça a l'air bien VSTS mais c'est une version d'essai qui est gratuite et surtout je code avec un VS2012 ultimate venant de l'école (je ne sais pas s'il est "pirate" ou officiel et qu'il peut s'utiliser par x personnes), je veux être sûr que mon site ne sera pas plombé par que Microsoft a snifé une version "pirate"...
    VSTS est gratuit jusqu'a 5 utilisateurs. Ca te permet d'utiliser Git ou le gestionnaire de source code de Microsoft integre a VSTS (Team Foundation Version Control).

    Quand au fait que Microsoft identifie ton VS pirate, s'il vient de ton ecole il n'est certainement pas "pirate", les ecoles disposent de licences de volume. Donc aucun souci a te faire de ce cote-la. Au pire tu peux toujours verifier avec le service IT de ton ecole pour en avoir le coeur net.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  14. #14
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Tu n'as pas precise comment tu utilises ca, donc je ne peux pas t'aider precisement. En tout cas ce qui est sur c'est que la regex proposee par Microsoft n'accepte pas certaines adresses mail pourtant valides.

    Si tu utilises le controle, tu peux faire comme ceci :
    Code ASPX : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:RegularExpressionValidator ID="regexEmailValid" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ControlToValidate="tbEmail" ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator>
    Il suffit de remplacer la regex dans la propriete ValidationExpression.
    Justement, cette regex est la plus standard et est proposée par VS, mais quand on rentre une email qui la respecte bien, il ne l'accepte pas.

    Citation Envoyé par DotNetMatt Voir le message
    Tu peux aussi developper ton propre validateur :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [ToolboxData("<{0}:EmailValidator runat=server></{0}:EmailValidator>")]
    public class EmailValidator : BaseValidator
    {
        protected override bool EvaluateIsValid()
        {
            var val = this.GetControlValidationValue(this.ControlToValidate);
            var pattern = @"^[a-z][a-z|0-9|]*([_][a-z|0-9]+)*([.][a-z|0-9]+([_][a-z|0-9]+)*)?@[a-z][a-z|0-9|]*\.([a-z][a-z|0-9]*(\.[a-z][a-z|0-9]*)?)$";
            var match = Regex.Match(val.Trim(), pattern, RegexOptions.IgnoreCase);
     
            return match.Success;
        }
    }
    Idem, remplace pattern avec la regex que tu souhaites utiliser.
    Je remplace [ControlToValidate] par ma Textbox ou j'instancie la classe [EmailValidator] et lui passe ma TextBox en paramètre ? je ne vois pas trop comment faire le lien avec le contrôle dans la page ASP...

    Citation Envoyé par DotNetMatt Voir le message
    VSTS est gratuit jusqu'a 5 utilisateurs. Ca te permet d'utiliser Git ou le gestionnaire de source code de Microsoft integre a VSTS (Team Foundation Version Control).

    Quand au fait que Microsoft identifie ton VS pirate, s'il vient de ton ecole il n'est certainement pas "pirate", les ecoles disposent de licences de volume. Donc aucun souci a te faire de ce cote-la. Au pire tu peux toujours verifier avec le service IT de ton ecole pour en avoir le coeur net.
    C'est que j'ai pas dû installer un crack ou un truc du genre, mais bon, faut que vérifie avant, je suis trop court maintenant pour tout perdre... je vois mon prof demain.

  15. #15
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par philousti88 Voir le message
    Justement, cette regex est la plus standard et est proposée par VS, mais quand on rentre une email qui la respecte bien, il ne l'accepte pas.
    La seule regex qui soit la plus standard est celle-ci :
    Citation Envoyé par RFC822
    (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*))*)?;\s*)
    C'est celle qui correspond au RFC822, qui definit le standard autour des emails. Voir Mail::RFC822::Address: regexp-based address validation pour plus d'info sur la regex. Il est possible de la tester ici : https://regex101.com/r/iE0rF5/1

    Citation Envoyé par philousti88 Voir le message
    Je remplace [ControlToValidate] par ma Textbox ou j'instancie la classe [EmailValidator] et lui passe ma TextBox en paramètre ? je ne vois pas trop comment faire le lien avec le contrôle dans la page ASP...
    La classe est en fait un controle utilisateur. Met la classe dans une DLL a part, compile cette DLL et fais glisser cette DLL dans la toolbox de VS. Tu devrais ensuite voir le control dans la toolbox. Il suffit de faire un drag and drop dans ton fichier ASPX pour remplacer le control <asp:RegularExpressionValidator... que tu utilises actuellement. Le code de la classe doit rester tel que je l'ai poste.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/01/2006, 21h33
  2. [Tomcat] session expirée redirection vers une page
    Par Casp dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 19/01/2006, 11h45
  3. redirection vers une page internet
    Par chti_juanito dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 09/01/2006, 17h42
  4. Redirection vers une page contenant celle qui redirectionne
    Par Rémiz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 16/11/2005, 14h38
  5. [PRO] redirection vers une page
    Par Mister_FX dans le forum ASP
    Réponses: 10
    Dernier message: 23/06/2004, 17h31

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