Обработчик событий не запускается с использованием AddHandler

У меня есть форма с около 40 флажков. После того, как флажок установлен, свойство элемента управления div должно быть изменено с "none" на "block" или наоборот. Я не получаю сообщение об ошибке, но отмеченное событие не обрабатывается. Вот разметка:

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

Вот код позади:

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

Вот саб

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

1 ответ

Решение

Обработчики событий, которые вы прикрепляете в блоке кода, который вы пометили как "кодовый код", будут эффективны только для этой итерации страницы. Обработчики не сохраняются во всех постбэках. Поэтому, когда пользователь устанавливает флажок и страница автоматически отправляется обратно на сервер, обработчики событий не подключены.

Вам нужно подключить обработчики событий на некотором этапе жизненного цикла страницы перед этапом обработки события обратной передачи. Вы можете сделать это в PageLoad или декларативно в вашей разметке.

Вот похожий вопрос.

Другие вопросы по тегам