Обработчик событий не запускается с использованием 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 или декларативно в вашей разметке.
Вот похожий вопрос.