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 :
et dans son code-behind :
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>Le deuxième, tout aussi simple :
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); }Son 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 <%@ 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>(Bon d'accord, dans ce cas il faut utiliser un requiredfieldvalidator mais la question n'est pas là, c'est pour l'exemple )
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); }
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 :(Pardonnez un vétéran de l'ASP3
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" /> <%} %>)
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 :Quelle solution de contournement s'offre à moi ? (sachant, bien-sûr que mes WebUserControl, customValidators et autres sont autrement plus "complexes" que ces exemples)MainContent_WebUserControl21_CustomValidator1 is null
Merci d'avance
Partager