У меня есть всплывающая панель, содержащая UpdatePanel, которая содержит DataList. Строки таблицы заполняются с помощью ItemTemplate, и в каждой строке создается ссылка LinkButton для удаления этой строки. Я хотел бы удалить эту запись в обработчике событий ItemCommand DataList и переустановить DataList.ItemCommand DataList в UpdatePanel не запускается после отправки
Однако после нажатия кнопки «Удалить» в DataList ItemCommand не запускается. Я уже проверял, IsPostBack в моей Page_Load и только Datalist.Databind(), если это не обратная передача. Обычно я ожидал бы первую страницу_Load, а затем list_ItemCommand вызывается после нажатия кнопки удаления в DataList, но list_ItemCommand не вызывается, как ожидалось. И ничего не отображается в DataList, который находится внутри UpdatePanel.
И, если я удаляю проверку IsPostBack в Page_Load, то, переходя в DataList в каждую страницу_Load, ItemCommand будет обнаружен и вызывается list_ItemCommand. Это противоречит ответам во многих других сообщениях. «Событие ItemCommand будет отменено, если DataList будет перегруппирован во время PostBack».
код позади:
Protected records As New List(Of Record)
Protected Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Set some page properties...
If Not Page.IsPostBack Then
GetListOfRecordFromDatabase()
datalist.DataSource = records
datalist.DataBind()
End If
End Sub
Protected Sub datalist_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles datalist.ItemCommand
Select Case e.CommandName.ToLower
Case "delete"
For Each c As Record In records
If c.Id = e.CommandArgument Then
records.Remove(c)
Exit For
End If
Next
DeleteRecordFromDatabase(e.CommandArgument)
datalist.DataSource = records
datalist.DataBind()
End Select
End Sub
управления:
<asp:Content ID="content1" runat="server" ContentPlaceHolderID="Content1PlaceHolder">
<asp:LinkButton ID="btnpopup" runat="server" OnClientClick="javascript:return popup()"></asp:LinkButton>
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server" EnableViewState="false" >
</asp:ScriptManagerProxy>
<asp:Panel ID="PanelPopup" runat="server" style="display:none;">
<asp:UpdatePanel ID="UPPopup" runat="server" UpdateMode="conditional" EnableViewState="false">
<ContentTemplate>
<div id="divPopup1" runat="server">
<table id="table1" cellpadding="2" cellspacing="1" width="500" border="0" >
<asp:DataList ID="datalist" runat="server" OnItemCommand="datalist_ItemCommand">
<ItemTemplate>
<tr align="center">
<td><%#Container.ItemIndex +1 %></td>
<td><asp:Label ID="Label1" runat="server" Text='<%# eval("Name") %>'></asp:Label></td>
<td><asp:Label ID="Label2" runat="server" Text='<%# eval("Color") %>'></asp:Label></td>
<td><asp:LinkButton ID="Delete" CommandName="Delete" runat="server" Text="Delete" CommandArgument='<%# eval("Id") %>' ></asp:LinkButton></td>
</tr>
</ItemTemplate>
</asp:DataList>
</table>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<div style="text-align:center;"><br />
<asp:Button ID="BtnSavePopup" runat="server" Text="Save and Close"/>
</div>
</asp:Panel>
<script type="text/javascript">
function popup() {
return mypagehelper.openAsModalPopup("<% =PanelPopup.ClientID%>");
}
</script>
</asp:Content>
Более того, я попытался схватить ControlID и управления, которые вызвавший событие во время Postback с помощью этого кода:
If IsPostBack Then
Dim CtrlID As String = String.Empty
If Request.Form("__EVENTTARGET") IsNot Nothing And
Request.Form("__EVENTTARGET") <> String.Empty Then
CtrlID = Request.Form("__EVENTTARGET")
Dim postbackControl As System.Web.UI.Control = Page.FindControl(CtrlID)
Else
End If
И я обнаружил, что могу получить свой CtrlID как «ctl00 $ datalist $ ctl08 $ Delete», но postbackControl Ничего. В то время как на других моих обычных страницах я могу получить как controlID, так и фактический контроль (который является LinkButton), который поднял это событие.
показать нам html? –
попробуйте добавить ' ' на панель обновления –
только что обновленный html. – cgao