更新パネルで可能なすべての組み合わせを試したと思いますが、これを機能させることができないようです。次のような更新パネルがあります。
<asp:UpdatePanel runat="server" ID="upParent" UpdateMode="Conditional" ChildrenAsTriggers="False">
<ContentTemplate>
Some content...
<div style="width:100%;text-align:center;">
<asp:Label ID="lblMainMessage" runat="server"></asp:Label>
<asp:UpdateProgress AssociatedUpdatePanelID="upParent" ID="UpdateProgress7" runat="server" DisplayAfter="100" DynamicLayout="True" Visible="True">
<ProgressTemplate>
<div class="loader ui-widget-overlay">
Loading data, please wait...<br/><img style="border-style:none;" src="../../Images/ajax-loader.gif" alt="loading" />
</div>
</ProgressTemplate>
</asp:UpdateProgress>
</div>
<div>
<asp:UpdatePanel runat="server" ID="upChild" UpdateMode="Conditional" ChildrenAsTriggers="False">
<ContentTemplate>
<asp:Timer ID="timerChecklists" runat="server" OnTick="TimerChecklistsTick" Interval="10000"></asp:Timer>
<asp:GridView ID="gvChecklists" runat="server"
AutoGenerateColumns="False" >
<Columns>
<ItemTemplate>
<asp:TemplateField HeaderText="Ques. Ans. Yes">
<ItemTemplate>
<asp:Label ID="lblQuestionsAnsweredYes" runat="server" ForeColor="Green"
Text='<%# DataBinder.Eval(Container, "DataItem.QuestionYesAnswered") %>'
ToolTip="Questions answered Yes."></asp:Label>
</ItemTemplate>
<FooterStyle HorizontalAlign="Center" />
<HeaderStyle HorizontalAlign="Center" />
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Ques. Ans. No">
<ItemTemplate>
<asp:Label ID="lblQuestionsAnsweredNo" runat="server" ForeColor="Red"
Text='<%# DataBinder.Eval(Container, "DataItem.QuestionNoAnswered") %>'
ToolTip="Questions answered No."></asp:Label>
</ItemTemplate>
<FooterStyle HorizontalAlign="Center" />
<HeaderStyle HorizontalAlign="Center" />
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Ques. Ans. N/A">
<ItemTemplate>
<asp:Label ID="lblQuestionsAnsweredNA" runat="server" ForeColor="Gray"
Text='<%# DataBinder.Eval(Container, "DataItem.QuestionNAAnswered") %>'
ToolTip="Questions answered N/A."></asp:Label>
</ItemTemplate>
<FooterStyle HorizontalAlign="Center" />
<HeaderStyle HorizontalAlign="Center" />
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Image ID="imgLoader" runat="server" ImageUrl="/Images/ajax-loader.gif" />
</td>
</tr>
</table>
</div>
<div style="width:100%;text-align:center;">
<asp:Label ID="lblspChecklists2" runat="server"></asp:Label>
</div>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="btnChecklistExcel"/>
<asp:AsyncPostBackTrigger ControlID="timerChecklists" />
</Triggers>
</asp:UpdatePanel>
私が達成しようとしているのは、そのサイズのためにいくつかのグリッドビューデータを遅延ロードすることです。だから私が単純にしたことは、更新パネル内にグリッドビューをラップすることです。次に、この更新パネル内にタイマーを配置し、ティック イベント用に 10000 (10 秒) に設定します。次のようにイベント OnTick を設定します。
protected void TimerChecklistsTick(object sender, EventArgs e)
{
LoadChecklistsSubPanel();
timerChecklists.Enabled = false;
imgLoader.Visible = false;
}
LoadChecklistsSubPanel は単純にデータセットを取得し、それをグリッド ビュー データソースに割り当て、データバインドを行います。これはすべて正常に機能します...ただし、私の問題は次のとおりです。
前述のように、親更新パネルと子更新パネルに注意してください。この中に、更新パネル upParent に関連付けられた更新の進行状況があります。しかし、私の問題は、10秒がヒットしてタイマーイベントが発生したときに、この更新の進行状況が表示されることです(実際には、ページ全体が基本的に読み込まれます)。updatemode が条件であり、トリガーとしての子が false であることを考えると、これは起こらないと思います。
また、ChildrenAsTriggers = trueを試しました。更新パネルモードを常に作成しようとしました。ほぼすべてを試しましたが、問題は解決しません。10 秒が UpdateProgress (データの読み込みを示す) に達した時点で、オーバーレイが表示されるまでお待ちください。
それ以外は、グリッド ビューが正しくバインドされ、10 秒後にデータが取得されるなどです。唯一の問題は、ネストされたサブパネルだけが発生している場合に、UpdateProgress が表示されて画面全体がオーバーレイされる理由を理解できないように見えることです。のみ更新する必要があります。