Я создал небольшой тестовый пример (включен ниже), чтобы посмотреть, смогу ли я воспроизвести вашу проблему, и между вашей реализацией и моей было три основных различия:
- Я не указал
RadAjaxLoadingPanel
- Я не указал
ClientEvents
(т.е. RequestStart
, RequestEnd
)
- Я не использовал
OnClientClick
диалоговое окно подтверждения
Решение № 1
Пройдя и добавив каждое из них в мой тестовый пример, Я обнаружил, что возникла проблема при использовании диалогового окна подтверждения с RadAjaxManager
. Небольшое исследование дало следующее решение:
Измените код OnClientClick
на следующий:
OnClientClick="if(!confirm('Are you sure you want delete this?')) return false;"
Устраняет ли это вашу проблему?
Вот некоторая документация по этому вопросу:
www.telerik.com/help/aspnet-ajax/ajax-confirmation.html
Вышеприведенное должно решить вашу проблему, но если нет, попробуйте временно удалить клиентские события RequestStart
и RequestEnd
и продолжайте очищать «дополнительные функции», пока не найдете проблему.
Вот тестовый пример, который работает как положено:
ASPX:
<telerik:RadAjaxManager ID="rda" runat="server">
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="pnlTest">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="pnlTest" />
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>
</telerik:RadAjaxManager>
<asp:Panel ID="pnlTest" runat="server">
<telerik:RadListView ID="lst" runat="server" OnItemCommand="lst_Command" OnNeedDataSource="lst_NeedDataSource">
<ItemTemplate>
<%#Eval("Test")%>
<asp:Button ID="btnDelete" runat="server" CommandArgument='<%#Eval("Test")%>' OnClientClick="if(!confirm('Are you sure you want delete this?')) return false;" CommandName="Delete" Text="Test" />
</ItemTemplate>
</telerik:RadListView>
<asp:Label ID="lblCommandArg" runat="server"></asp:Label>
</asp:Panel>
Код-за:
protected void lst_NeedDataSource(object sender, RadListViewNeedDataSourceEventArgs e)
{
DataTable table = new DataTable();
table.Columns.Add("Test", typeof(string));
DataRow row = table.NewRow();
row.SetField<string>("Test", "Testing");
table.Rows.Add(row);
row = table.NewRow();
row.SetField<string>("Test", "Testing again");
table.Rows.Add(row);
lst.DataSource = table;
}
protected void lst_Command(object sender, RadListViewCommandEventArgs e)
{
lblCommandArg.Text = e.CommandArgument.ToString();
}
Использование RadAjaxPanel
вместо RadAjaxManager
Глядя на ваш код, кажется, что самое простое решение - использовать RadAjaxPanel
вместо RadAjaxManager
. Я не уверен, подходит ли вам этот вариант, но это, вероятно, самый простой способ заставить ваш код работать.
Используйте RadAjaxPanel для panGameWaypoints
вместо обычной панели, которая гарантирует, что все содержимое внутри будет использовать AJAX:
<telerik:RadAjaxPanel ID="panGameWaypoints" runat="server">
<telerik:RadListView ID="RadListView1" runat="server" ... >
</telerik:RadAjaxPanel>