更新面板按钮需要按两次更新

本文关键字:更新 按两次 按钮 | 更新日期: 2023-09-27 17:49:25

我在更新面板中有一个列表视图,但是我不能让它正确更新-每个项目都有一个从列表中删除它的按钮-它确实这样做了,但是需要按两次按钮才能看到项目从页面上消失。

这里的标记是:

<asp:ScriptManager ID="DashScriptManager" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="ToDoUpdate" runat="server" UpdateMode="Conditional">
   <ContentTemplate>
      <asp:ListView ID="ToDo" runat="server">
         <ItemTemplate>
            <li style="" class="<%# Eval("ToDoPriority")%>">
               <%# Eval("ToDoText")%>
               <div class="agile-detail">
                  <asp:LinkButton ID="ToDoComplete" runat="server" CssClass="pull-right btn btn-xs btn-primary" Text="Done" OnClick="ToDoComplete_Click"></asp:LinkButton>
                  <i class="fa fa-clock-o"></i> <%# Eval("ToDoDate")%>
               </div>
            </li>
            <asp:HiddenField ID="HiddenToDoID" runat="server" Value='<%# Eval("ToDoId") %>' />
         </ItemTemplate>
      </asp:ListView>
   </ContentTemplate>
</asp:UpdatePanel>

和背后的代码:

protected void ToDoComplete_Click(Object sender, EventArgs e)
   {
      LinkButton ToDoComplete = sender as LinkButton;
      HiddenField todo =     ToDoComplete.NamingContainer.FindControl("HiddenToDoID") as HiddenField;
      int TodDoId = Convert.ToInt32(todo.Value);
      DashboardController.UpdateToDo(TodDoId);
      GetToDoItems(1);
      ToDoUpdate.Update();
    }

有没有办法按一次按钮就能做到这一点?

更新面板按钮需要按两次更新

您缺少的是UpdatePanel中的触发器部分。当你的更新面板为UpdateMode ="Conditional"时,你需要指定触发器。如果你正在使用正常的完整回发,那么将AsyncPostBackTrigger更改为PostBackTrigger。

<asp:UpdatePanel ID="ToDoUpdate" runat="server" UpdateMode="Conditional">
   <ContentTemplate>
      <asp:ListView ID="ToDo" runat="server">
            <li style="" class="<%# Eval("ToDoPriority")%>">
               <%# Eval("ToDoText")%>
               <div class="agile-detail">
                  <asp:LinkButton ID="ToDoComplete" runat="server" CssClass="pull-right btn btn-xs btn-primary" Text="Done" OnClick="ToDoComplete_Click"></asp:LinkButton>
                  <i class="fa fa-clock-o"></i> <%# Eval("ToDoDate")%>
               </div>
            </li>
            <asp:HiddenField ID="HiddenToDoID" runat="server" Value='<%# Eval("ToDoId") %>' />
         </ItemTemplate>
      </asp:ListView>
   </ContentTemplate>
<Triggers>
 <asp:AsyncPostBackTrigger ControlID="ToDo" EventName="Click" />
 </Triggers>
</asp:UpdatePanel>