2010-10-15 16 views
0

J'ai un formulaire avec environ 40 cases à cocher. Une fois qu'une case est cochée, la propriété du contrôle div doit être changée de "none" à "block" ou vice versa. Je n'obtiens pas d'erreur, mais l'événement checkedchanged n'est pas géré. Voici le balisage:Le gestionnaire d'événements ne se déclenche pas avec AddHandler

<tr> 
    <td class="sectionSubHeader lightgrey"> 
     <asp:CheckBox ID="chkbxCOMAEFund" AutoPostBack="true" runat="server" /> 
     COM Academic Excellence Fund - Endowed 
    </td> 
</tr> 
<tr> 
    <td> 
     <ul class="boldDetail"> 
      <li>Financial Need</li> 
     </ul> 
    </td> 
</tr> 
<tr> 
    <td colspan="2" class="subSectionPad">Description..</td> 
</tr> 
<tr> 
    <td colspan="2" class="subSectionPad"> 
     <asp:Label ID="lblCOMAEFund" runat="server"></asp:Label><br /> 
     <div id="divCOMAEFund" runat="server"> 
      <asp:TextBox ID="txtCOMAEFund" runat="server" TextMode="MultiLine" Columns="95" Rows="4"></asp:TextBox> 
     </div> 
    </td> 
</tr> 

Voici le codebehind:

Dim temp As String 
Dim div As HtmlControl 

For Each ctrl As Control In wizard.WizardSteps 
    For Each subCtrl As Control In ctrl.Controls 
     If TypeOf (subCtrl) Is CheckBox Then 
      temp = subCtrl.ID.Replace("chkbx", "div") 
      div = wizard.FindControl(temp) 
      div.Style("display") = "none" 
      AddHandler CType(subCtrl, CheckBox).CheckedChanged, AddressOf Chkbx_CheckChanged 
     End If 
    Next 
Next 

Voici le sous

Private Sub Chkbx_CheckChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    Dim temp As String 
    temp = sender.ID 
    temp = temp.Replace("chkbx", "div") 
    Dim divCtrl As HtmlControl 
    divCtrl = wizard1.FindControl(temp) 

    If sender.Checked = True Then divCtrl.Style("display") = "block" Else divCtrl.Style("display") = "none" 

End Sub 

Répondre

7

Les gestionnaires d'événements que vous joindrez dans le bloc de code que vous avez marqué "the codebehind" ne sera efficace que pour cette itération de la page. Les gestionnaires ne sont pas persistés à travers les publications. Ainsi, lorsque l'utilisateur cocher une case et que la page est automatiquement renvoyée au serveur, les gestionnaires d'événements n'ont pas été câblés.

Vous devez avoir les gestionnaires d'événements câblés à un certain stade dans le page life cycle avant l'étape de gestion des événements de publication. Vous pouvez le faire dans PageLoad ou de manière déclarative dans votre balisage.

Here's une question similaire.