我有一个通过计时器更新的列表框,并在UpdatePanel内按预期工作。
但是我无法触发selectedindexchanged事件。我认为这与部分回发有关。有谁知道我能做些什么来使这项工作?
当我将它移出UpdatePanel时,它可以正常工作。但显然我不能做部分回发。
<asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="500"></asp:Timer>
<asp:ListBox ID="ListBox_JobPositions" OnSelectedIndexChanged="ListBox_JobPositions_SelectedIndexChanged" runat="server" Height="750px" Width="300px" DataSourceID="sqlDataSource" DataTextField="Company" DataValueField="Pid"></asp:ListBox>
</ContentTemplate>
</asp:UpdatePanel>
更新:
现在尝试了以下更改,计时器事件仍然有效,但是selectedindexchanged事件不是。我迷失了。
<asp:UpdatePanel ID="UpdatePanel" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional">
<ContentTemplate>
<asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="500"></asp:Timer>
<asp:ListBox ID="ListBox_JobPositions" runat="server" Height="750px" Width="300px" DataSourceID="sqlDataSource" DataTextField="Company" DataValueField="Pid" OnSelectedIndexChanged="ListBox_JobPositions_SelectedIndexChanged" AutoPostBack="True"></asp:ListBox>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" />
</Triggers>
以下是当列表框位于UpdatePanel内部时不会触发的事件,但是当它没有时,它会起作用。
protected void ListBox_JobPositions_SelectedIndexChanged(object sender, EventArgs e)
{
Response.Write("test");
}
答案 0 :(得分:4)
您没有收到此事件的原因是,您的更改事件未导致PostBack。您的回发是由计时器引起的。
asp.net接收的事件是timer事件而不是ListBox事件。
要解决此问题,您应将AutoPostBack
设置为true。这将导致ListBox在数据更改后立即执行PostBack,并且您的事件应该触发。
<asp:ListBox ID="ListBox_JobPositions" AutoPostBack="True"
OnSelectedIndexChanged="ListBox_JobPositions_SelectedIndexChanged"
runat="server" Height="750px" Width="300px"
DataSourceID="sqlDataSource"
DataTextField="Company"
DataValueField="Pid">
</asp:ListBox>
由于您已将UpdateMode
设置为Conditional
,因此您还应将ChildrenAsTriggers
设置为true。通过这种方式,List会导致PostBack,这也是部分更新。
<asp:UpdatePanel ID="UpdatePanel" runat="server"
UpdateMode="Conditional"
ChildrenAsTriggers="True">
答案 1 :(得分:0)
现在可以使用,必须手动指定Async和Full Postback触发器。谢谢你的帮助。
<asp:UpdatePanel ID="UpdatePanel" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional">
<ContentTemplate>
<asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="500"></asp:Timer>
<asp:ListBox ID="ListBox_JobPositions" runat="server" Height="750px" Width="300px" DataSourceID="sqlDataSource" DataTextField="Company" DataValueField="Pid" OnSelectedIndexChanged="ListBox_JobPositions_SelectedIndexChanged" AutoPostBack="True"></asp:ListBox>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" />
<asp:PostBackTrigger ControlID="ListBox_JobPositions" />
</Triggers>
</asp:UpdatePanel>