更新面板按钮需要按两次才能更新
Update Panel Button need to be pressed twice to update
我在更新面板中有一个列表视图,但我无法使其正确更新 - 每个项目都有一个按钮可以将其从列表中删除 - 它确实如此,但需要按下两次按钮才能看到项目从页面上消失。
这里是标记:
<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>
我在更新面板中有一个列表视图,但我无法使其正确更新 - 每个项目都有一个按钮可以将其从列表中删除 - 它确实如此,但需要按下两次按钮才能看到项目从页面上消失。
这里是标记:
<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>