2010-03-31 4 views
2

J'ai une page aspx qui contient une case à cocher et un bouton. Le bouton est désactivé par défaut jusqu'à ce que l'utilisateur coche la case. Il semble que lorsque j'ajoute l'attribut enabled = "false" au bouton, cela supprime la validation. Lorsque le bouton est activé, je veux toujours que la validation fonctionne. Voici le code et le balisage pour les différentes parties.Le bouton désactivé asp.net désactive la validation du bouton

Checkbox:

<asp:CheckBox runat="server" ID="termsCheckBox" /> 
<label style="display: inline;"> 
I agree to the Terms & Conditions</label> 

Button:

<asp:Button runat="server" ID="registerButton" OnClick="registerButton_Click1" 
Text="Register" Enabled="false" ValidationGroup="accountValidation" /> 

JQuery:

<script type="text/javascript" language="javascript"> 
$(document).ready(function() { 
    $('#<%=termsCheckBox.ClientID %>').click(function() { 
     var checked = $(this).val(); 

     if (checked != undefined) 
      $('#<%=registerButton.ClientID %>').removeAttr('disabled'); 
     else 
      $('#<%=registerButton.ClientID %>').attr('disabled', 'disabled'); 
    }); 
}); 
</script> 

Répondre

0

Je pense que cela fonctionnerait si vous avez activé/désactivé le bouton de l'événement côté serveur CHECKBOX plutôt que côté client puisque le code de validation côté client associé sera généré afin de fonctionner pour ValidationGroup du bouton

+0

Le côté client fonctionne très bien. Je n'ai pas besoin d'un voyage sur le serveur juste pour activer un bouton. – Xaisoft

+0

Je veux dire que pour que le bouton asp.net fasse partie de la validation ValidationGroup effectuée par le framework .Net, vous devrez effectuer une publication sur le serveur pour vous assurer que le script doit avoir le bouton attaché à un gestionnaire sur le client . Si vous avez un script personnalisé sur le client, alors vous devez vous assurer qu'il a été attaché à l'événement de clic du client sur le bouton à déclencher ... à moins que j'ai raté quelque chose – Sunny

+0

Ok, je pense que je vous ai bien compris. Dites-vous que parce que je le passe côté client et que je ne publie pas un post, la validation du bouton n'est pas gérée car le script n'est pas ajouté lorsqu'il est activé. – Xaisoft

2

Il semble que la validation doit être jointe à la case à cocher, et non sur le bouton.

+0

J'ai essayé de mettre la validation sur la case à cocher et j'ai reçu un message d'erreur indiquant que le ControlToValidate n'était pas valide pour une case à cocher. – Xaisoft

+0

quel type de validateur avez-vous utilisé - je ne le vois pas dans le code que vous avez posté – Ray

+0

J'utilise toutes sortes, Comparer, Requis, RegularExpression – Xaisoft

2

Asp .net est stupide parce que quand un contrôle est désactivé, il y a toutes sortes de choses qui ne vont pas arriver avec.

Dans ce cas, le code js pour provoquer la validation côté client ne sera pas créé pour un bouton désactivé.

Si vous essayez d'ajouter manuellement dans le clientside le code du code derrière,

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    registerButton.OnClientClick = String.Format("javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions('{0}', '', true, '', '', false, false))", registerButton.UniqueID) 
End Sub 

Il ne fonctionnera pas parce que asp.net ne rend pas tous les attributs d'un contrôle désactivé.

Il existe alors deux solutions. Désactivez le contrôle avec JS côté client ou ajoutez le javascript pour effectuer une publication avec validation côté client.

Ce que je l'ai fait pour mon programme était d'ajouter du code pour créer du code js pour désactiver le bouton du côté client:

If btnSubmit.Enabled = False Then 
     'Asp.net will not render all the attributes for a control that is disabled. Even if you 
     'try to set the OnClientClick attribute manually in code behind for the control, it will 
     'not work. Asp.net will not render the attribute. This is a workaround for this problem. 
     btnSubmit.Enabled = True 

     strJavaScript &= "btnSubmit.disabled = true;" 

    End If 

    ClientScript.RegisterStartupScript(Page.GetType(), "myStartupScript", strJavaScript, True) 

Notez que btnSubmit est une variable javascript qui est déjà défini dans mon code côté client .

Questions connexes