2015-04-18 4 views
0

У меня есть всплывающая панель, содержащая 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), который поднял это событие.

+1

показать нам html? –

+0

попробуйте добавить ' ' на панель обновления –

+0

только что обновленный html. – cgao

ответ

0

Удалить EnableViewState = "false" из панели обновления.

0

это поздний ответ, но я столкнулся в ближайшее время, может быть это поможет кто-то еще ... CommandName="Delete" зарезервирован для DataList "OnItemDeleting" Event так просто изменяя CommandName к чему-то еще (например, "Remove") поможет или обработать событие OnItemDeleting.

Смежные вопросы