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:
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:
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:
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:
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:
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 :
Citation:
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