2015-05-17 1 views
0

У меня есть просмотр списка внутри панели обновлений, но я не могу заставить его правильно обновлять - у каждого элемента есть кнопка, которая удаляет ее из списка - что она делает, но требуется два нажатия кнопок, чтобы увидеть, как элемент исчезает со страницы.Кнопка обновления панели необходимо дважды нажать, чтобы обновить

Здесь разметка:

<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(); 
    } 

Есть ли способ сделать это путем однократного нажатия на кнопку?

+0

Когда вы нажимаете кнопку в первый раз, действительно ли вызван обработчик события Click? Если нет, возможно, это проблема с Focus. Другой элемент управления может принадлежать мыши, поэтому вам нужно щелкнуть в другом месте, чтобы отпустить его, а затем еще один щелчок, чтобы нажать кнопку. – BlackBox

ответ

1

Что вам не хватает, это раздел «Триггеры» в UpdatePanel. В качестве панели обновления как UpdateMode = «Условный» вам необходимо указать триггеры. Если вы используете обычную полную обратную передачу, измените 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> 
+0

Итак, объясняется ли это, почему нам нужен второй клик для обновления UpdatePanel? – ErTR