【发布时间】:2018-07-26 13:43:01
【问题描述】:
我有一个列表框,它存在于 ASP.NET 网络表单的 UpdatePanel 中。同样在UpdatePanel内部,还有一个Button,可以将一堆ListItem添加到Listbox中,这个PostBackTrigger如下图所示:
<asp:UpdatePanel ID="updSection6" runat="server">
<ContentTemplate>
<asp:LinkButton Text="Run Scan" ID="btnEditSectionStory6" runat="server" OnClick="btnRunScan_Click" />
<br />
<asp:ListBox ID="lbLog" runat="server" Height="263px" Width="747px"></asp:ListBox>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="btnEditSectionStory6" />
</Triggers>
</asp:UpdatePanel>
我在点击事件中添加项目:
protected void btnRunScan_Click(object sender, EventArgs e)
{
lbLog.Items.Add("Scan Beginning...");
.....hundreds of other items
}
项目被添加到 ListBox,但是它是在整个 btnRunScan_Click 方法运行之后,而不是在每个事件发生时添加它们(因此用户可以在操作发生时接收消息)。我是否缺少 UpdatePanel 上的某个属性或其他内容?
TIA
【问题讨论】:
-
我不明白这个问题。您将控件放置在 UpdatePanel 中,然后附加一个 PostBack 触发器。除非
updSection6里面有更多的控件,否则这里显示的完全没用。但是“运行整个 btnRunScan_Click 方法”是什么意思?如果您希望项目在 ListBox 中一一显示?这不是它的工作原理。 -
你后面的评论是正确的。我正在寻找一种在 btnRunScan_Click 方法末尾逐个添加项目而不是全权委托的方法
-
Webforms 不能这样工作。只有当所有代码运行完成后,更新 html 才会发送到浏览器。如果你想要这个,你将需要一个带有 web 服务的 Ajax 解决方案。
-
IOW,导致回发的控件(如 LinkButton)是触发器,如果它们位于更新面板内;如果它们在更新面板之外,您只需要添加一个触发器。而且,每次回发都会发布整个页面。如果回发发生在更新面板内(或通过触发器),则只会更新更新面板内的 html。