Проблема RadAjaxManager при отображении / скрытии элемента управления при загрузке страницы
У меня есть веб-форма с выпадающим списком, меткой и текстовым полем. Как ниже:
<asp:DropDownList ID="ddlTest" runat="server" AutoPostBack="true">
</asp:DropDownList>
<asp:Label ID="lblTest" runat="server" Text="Some text">
</asp:Label>
<asp:TextBox ID="edtTest" runat="server">
</asp:TextBox>
Я хочу показать / скрыть метку и текстовое поле в зависимости от значения, выбранного в раскрывающемся списке. Итак, я добавил RadAjaxManader:
<rad:RadAjaxManager ID="RadAjaxManager1" runat="server">
<AjaxSettings>
<rad:AjaxSetting AjaxControlID="ddlTest">
<UpdatedControls>
<rad:AjaxUpdatedControl ControlID="lblTest" />
<rad:AjaxUpdatedControl ControlID="edtTest" />
</UpdatedControls>
</rad:AjaxSetting>
</AjaxSettings>
</rad:RadAjaxManager>
и процедура "SetupVisibility", которая принимает значение из выпадающего списка, выполняет некоторые проверки и решает, показывать или скрывать метку и текстовое поле. Когда я использую процедуру, как это:
Protected Sub ddlTest_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlTest.SelectedIndexChanged
SetupVisibility()
End Sub
это работает хорошо, но теперь я хочу вызвать SetupVisibility при загрузке страницы:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
SetupVisibility()
End Sub
Проблема возникает в таком сценарии:
- SetupVisibility () скрывает текстовое поле и метку во время загрузки страницы.
- Я изменяю значение в выпадающем списке ddlTest.
- SetupVisibility () хочет показать текстовое поле и метку, но затем я получаю ошибку:
Microsoft JScript - runtime error: Cannot update control with ID: ctl00_CPH1_lblTest. The control does not exist.
В чем проблема?
2 ответа
Я решил проблему. Я обернул текстовое поле и метку в div и панель:
<div id="panelTest_DIV" runat="server">
<asp:Panel ID="panelTest" runat="server">
<asp:Label ID="lblTest" runat="server" Text="Some text..."></asp:Label><br />
<asp:TextBox ID="edtTest" runat="server"></asp:TextBox>
</asp:Panel>
</div>
и AjaxManager:
<rad:AjaxSetting AjaxControlID="ddlTest">
<UpdatedControls>
<rad:AjaxUpdatedControl ControlID="panelTest_DIV" />
</UpdatedControls>
</rad:AjaxSetting>
внутри SetupVisibility()
Я поставил panelTest.Visibility
, Это решило проблему.
Page_Init запускается при инициализации страницы. Во время этого мероприятия нет гарантии, что элементы управления были созданы.
Попробуйте поместить свой код в Page_Load, поскольку к тому времени гарантированно будут созданы элементы управления.