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 :

customvalidator dans ascx fonctionnent mal (ou pas !)


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut customvalidator dans ascx fonctionnent mal (ou pas !)
    Bonjour à tous

    Je rencontre des difficultés avec des customvalidator qui peuvent ou pas être dans une webform : je m'explique

    J'ai deux webUserControl définis comme suit :

    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
    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" ClassName="controle1" Inherits="testWeb.WebUserControl1" %>
    <script type="text/javascript">
        function test(sender, args) {
     
            var b = document.getElementById(sender.rad1);
            var c = document.getElementById(sender.rad2);
            //alert(b.checked);
            if (!b.checked && !c.checked)
                args.IsValid = false;
            else
                args.IsValid = true;
        }
        </script>
        <div style="background-color: #CCCCFF">1 : 
    <asp:RadioButton ID="RadioButton1" runat="server" GroupName="r" />
    <asp:RadioButton ID="RadioButton2" runat="server" GroupName="r" />
    <asp:CustomValidator ID="CustomValidator1" runat="server" 
        ClientValidationFunction="test" ErrorMessage="Pas cool" 
                ondatabinding="CustomValidator1_DataBinding"></asp:CustomValidator>
    <br />
     
    </div>
    et dans son code-behind :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    protected void Page_Load (object sender, EventArgs e)
                {
     
                Page.ClientScript.RegisterExpandoAttribute (CustomValidator1.ClientID, "rad1", RadioButton1.ClientID);
                Page.ClientScript.RegisterExpandoAttribute (CustomValidator1.ClientID, "rad2", RadioButton2.ClientID);
                }
    Le deuxième, tout aussi simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl2.ascx.cs" Inherits="testWeb.WebUserControl2" %>
    <script type="text/javascript">
        function valider(sender, args)
        {
            args.IsValid = document.getElementById(sender.text1).value != "";
        }
    </script>
    <div style="background-color: #CCFF99">2 : 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:CustomValidator ID="CustomValidator1" runat="server" 
            ErrorMessage="Pas bon" ClientValidationFunction="valider" 
            ondatabinding="CustomValidator1_DataBinding"></asp:CustomValidator>
     
    </div>
    Son code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           protected void Page_Load (object sender, EventArgs e)
                {
                Page.ClientScript.RegisterExpandoAttribute (CustomValidator1.ClientID, "text1", TextBox1.ClientID);
                }
    (Bon d'accord, dans ce cas il faut utiliser un requiredfieldvalidator mais la question n'est pas là, c'est pour l'exemple )

    Le problème spécifique, c'est que dans mon webform, je peux afficher l'un ou l'autre (mais pas les deux). J'ai bêtement fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <%if (Request.QueryString["bid"] != null && Request.QueryString["bid"].ToString () == "x")
              { %>
              <uc1:WebUserControl1 ID="WebUserControl11" runat="server" 
            />
        <% }
          else
              {%>
        <uc2:WebUserControl2 ID="WebUserControl21" runat="server" />
        <%} %>
    (Pardonnez un vétéran de l'ASP3 )

    Autant le HTML généré est conforme à mes attentes, autant du côté javascript (c'est bien sûr la validation côté client qui m'interresse), le résultat est inattendu : le javascript généré l'est pour les deux WebUserControl, avec de belles erreurs du style :
    MainContent_WebUserControl21_CustomValidator1 is null
    Quelle solution de contournement s'offre à moi ? (sachant, bien-sûr que mes WebUserControl, customValidators et autres sont autrement plus "complexes" que ces exemples)

    Merci d'avance


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  2. #2
    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
    Est-ce que cela fonctionne avec 1 seul UserControl toujours présent dans la page?

  3. #3
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    Oui, chacun des WebUserControl fonctionne individuellement.


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  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
    Je connais pas cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Page.ClientScript.RegisterExpandoAttribute (CustomValidator1.ClientID, "rad1", RadioButton1.ClientID);
    Moi, j'aurais fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var b = document.getElementById('<%= RadioButton1.ClientID %>');

  5. #5
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    Re :

    Ca sort directement de la FAQ :http://dotnet.developpez.com/faq/asp...ustomValidator

    Moi, j'aurais fait:
    var b = document.getElementById('<%= RadioButton1.ClientID %>');
    Oui, c'est à peu près équivalent, et ca avait été mon premier reflexe. Il y a néanmoins une difficulté supplémentaire : je dois aussi référencer un champs texte qui se trouve non pas dans mon webUserControl, mais dans le formulaire qui le contient. Ainsi, si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var a = document.getElementById('<%= TextBox1.ClientID   %>');
    Il ne compilera pas, car TextBox1 n'existe pas. Par contre, si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     protected void Page_Load (object sender, EventArgs e)
            {
            Page.ClientScript.RegisterExpandoAttribute (CustomValidator1.ClientID, "cp", "ch_cp");
    // ch_cp étant le ClientID de mon textBox
        }
    ça compile.

    Le but de la chose étant, que selon l'option choisie, certains champs doivent être renseignés.


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  6. #6
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    J'ai quand-même adopté la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var b = document.getElementById('<%= RadioButton1.ClientID   %>');
    même pour le champs texte supplémentaire (en dur, tant pis).

    La solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Page.ClientScript.RegisterExpandoAttribute
    ne sempble pas adaptée dans ce contexte.

    Merki.


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/05/2013, 17h27
  2. macro fonctionne dans un classeur test mais pas dans mon vrai classeur
    Par steeeve34 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/09/2012, 22h15
  3. Réponses: 4
    Dernier message: 03/08/2012, 12h05
  4. Réponses: 1
    Dernier message: 22/05/2009, 01h17
  5. Réponses: 5
    Dernier message: 09/09/2005, 11h24

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