我有一个带有侧边栏的母版页,其中包含用于网站导航的手风琴控件。在我的一个子窗体上,我在UpdatePanel中添加了一个GridView。该用户通过单击按钮启动作业。此作业写入数据库表,我希望通过网格视图显示此更新。我添加了一个带有ontick事件的计时器控件,该事件执行GridView.DataBind。
GridView数据在每个刻度(2秒)刷新,问题是整个页面(包括母版页)收到回发 - 导致我的手风琴控件的选定面板被重置。
之前我没有使用过UpdatePanel控件,但我希望这会阻止整页回发。我猜我配错了。我已经粘贴了包含Panel和GridView的div。谁能告诉我我做错了什么?
由于
罗布。
<div id="statusGrid">
<u>Job Status</u>
<br />
<asp:UpdatePanel ID="StatusUpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:GridView ID="grdJobStatus" runat="server" DataSourceId="sqlJobStatus">
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
<PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
<RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
</asp:GridView>
<asp:SqlDataSource ID="sqlJobStatus" runat="server" ConnectionString="<%$ ConnectionStrings:ARC_CTRLConnectionString %>">
</asp:SqlDataSource>
</ContentTemplate>
</asp:UpdatePanel>
<asp:Label ID="lblBODIJobMsg" runat="server"></asp:Label>
</div>
答案 0 :(得分:1)
只有UpdatePanel
内的元素会在部分回发时更新 - 您是否希望更新lblBODIJobMsg
?
另请参阅@ck关于代码隐藏的其他更改的内容。
您可能还想检查页面上的其他javascript和ASP.Net元素。我曾经有过整个页面由于`UpdatePanel中的DropDownList
而回发的情况。
你的计时器在哪里?根据您的实现方式,它可能会发布整个页面。也许它也需要在UpdatePanel
里面?
答案 1 :(得分:0)
Page_Load事件是作为AJAX回发的一部分触发的。如果这有任何影响副作用的更改,那么将重新加载整个页面。
答案 2 :(得分:0)
在page_load中,您需要检查IsPostBack。像这样的东西
protected void Page_Load(object sender, EventArgs e)
{
if(IsPostBack) return;
//do first-time load stuff here
}
此外,启动作业的按钮在哪里?它也应该在您的更新面板中。
答案 3 :(得分:0)
计时器不一定在更新面板中,也可以设置为更新面板的触发器,即使它在外面也是如此。 如:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>