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