ASP.NET/AJAX Updatepanel показывает дважды
Я уже давно не прикасался к аспиду и начинаю вспоминать почему!
У меня есть панель обновления, которая содержит ретранслятор, элементы ретранслятора содержат кнопку, и я хочу, чтобы эта кнопка была асинхронным триггером обратной связи для панели обновления.
Панель обновления выглядит следующим образом:
<asp:UpdatePanel runat="server" Visible="true" ID="pnlSproc" UpdateMode="Conditional" ChildrenAsTriggers="true"> <ContentTemplate> . . . <asp:Repeater runat="server" ID="rptParameters" EnableViewState="true" OnItemCreated="rptParameters_ItemCreated" > <ItemTemplate> <tr> . . . <td> <asp:Button runat="server" ID="btnAddParameter" /> </td> </tr> </ItemTemplate> </asp:Repeater> </tr> </ContentTemplate> </asp:UpdatePanel>
Событие ItemCreated ретранслятора добавляет кнопку в качестве асинхронного триггера ...
protected void rptParameters_ItemCreated(object source, RepeaterItemEventArgs e) { ScriptManager manager = ScriptManager.GetCurrent(this); Button button = (Button)e.Item.FindControl("btnAddParameter"); if (button != null) { button.Click += AddParameterClick; manager.RegisterAsyncPostBackControl(button); } }
Когда событие срабатывает, все соответствующие события срабатывают, как и ожидалось, но панель отображается дважды - один раз в обновленном виде (выше страницы, чем должно быть) и один раз в исходном виде и положении.
Если я изменю вызов RegisterAsyncPostBackControl на RegisterPostBackControl, все будет работать так, как я ожидал, но, очевидно, я получу полный постбэк страницы, который мне не нужен.
Кто-нибудь сталкивался с чем-то подобным раньше? Это, конечно, выглядит так, как будто это асинхронный постбэк, который вызывает проблему рендеринга (это происходит как в IE, так и в Chrome, и моя наценка выглядит полностью корректной. Я попытался переместить менеджер сценариев со страницы на мастер, но это тоже не дало никакого эффекта.
Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)
Вы обновляете панель обновления внутри события AddParameterClick? Можете ли вы показать код этого события?
PeejayAdams
Привет Тадит,
Да это происходит в AddParameterClick
охраняемых недействительными AddParameterClick(объект отправителя, EventArgs в электронной)
{
если (_parameters == нуль)
_parameters = новый список<ProcedureParameter>();
foreach (RepeaterItem item in rptParameters.Предметы)
{
Имя текстового поля = (TextBox)элемент.FindControl("tbParameterName");
TextBox value = (текстовое поле)элемент.FindControl("tbParameterValue");
_параметры.Add(new ProcedureParameter(name.Текстовое значение.Текст));
}
_параметры.Добавить(новый процедурный параметр());
rptParameters.Источник данных = _parameters;
rptParameters.Привязку();
пнлспрок.Обновление();
}
Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)
Следуйте моему ответу. Дайте мне знать, работает ли это или нет, добавив комментарии внутри самого поля ответа.