我有一个包含两个更新面板的页面,每个面板都有一个动态生成的gridview。 Updatepanel1每十秒钟在计时器上刷新一次。在第一个网格中选择项目时,第二个更新/网格将刷新。
我正在尝试使用__doPostBack完成此专长。此方法到达服务器并在updatepanel2上运行我的.update。我看到updatepanel2获取数据,但表单实际上从未更新updatepanel2。
我可以让updatepanel2仅在updatepanel1计时器滴答时显示数据,并将updatepanel2模式设置为“Always”。
有人有什么建议吗?
由于
答案 0 :(得分:1)
我解决了这个问题。我修改为使用以下方法进行doPostBack调用。
http://encosia.com/2007/07/13/easily-refresh-an-updatepanel-using-javascript/
希望这有帮助。
答案 1 :(得分:1)
我看到你回答了你自己的问题,但是为了别人的利益而不是doPostBack(),为什么不在Timer上设置以指定的间隔刷新,或者作为带有“UpdatePanel1.Update”的Tick事件方法()“在方法的最后?这样,您需要在Default.aspx页面代码本身中设置间隔;我选择了10毫秒,这样可以显示快速操作的进度:
<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="360000" />
<asp:Button ID="btnDoSomething" runat="server" Text="Do Something" OnClick="btnDoSomething_Click" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load" UpdateMode="conditional">
<ContentTemplate>
<span id="spnLabel" runat="server">
<asp:Timer ID="Timer1" runat="server" Interval="10" OnTick="Timer1_Tick"></asp:Timer>
</ContentTemplate>
<Triggers >
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>
然后在你有更新时调用的代码隐藏中有一个Timer1_Tick方法 - 在这个例子中,要从btnDoSomething_Click()方法添加到spnLabel.InnerHtml:
protected void btnDoSomething_Click(object sender, EventArgs e)
{
Timer1.Enabled = true;
Timer1.Interval = 10;
Timer1_Tick(sender, e);
Timer1.Enabled = false;
}
protected void Timer1_Tick(object sender, EventArgs e)
{
spnLabel.InnerHtml = "hi";
UpdatePanel1.Update();
}
请记住,刷新由Timer间隔控制,而不是在您调用Timer1_Tick(sender,e)时控制,即使您最后有一个UpdatePanel1.Update() - 例如,如果您将间隔设置为10000,它将在10秒后更新,即使您的操作在此之前已多次使用Timer1_Tick()方法。无论如何,你仍然需要最后的UpdatePanel1.Update()。
- 汤姆