すべてのコントロールを UpdatePanel 内に配置し、更新パネルのトリガーを作成します。
Page_Load またはその他のページ イベントにデータ/コントロールをロードしないでください。代わりに、ページにデータ/コントロールをロードする関数を作成してください。
ページを空にします。クライアント側のページロード イベントに JavaScript を記述し、その JavaScript で更新パネル トリガーを呼び出します。サーバー側でトリガークリックにデータ/制御ロードコードを記述します。さらにいくつかの変更があります。サンプル コードを参照してください。
サンプルコード (aspx):
<asp:UpdatePanel ID="upD" runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="ph" EnableViewState="False" runat="server">
</asp:PlaceHolder>
<asp:HiddenField ID="hdnIsPostBack" Value="0" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnLoadData" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdateProgress ID="upr" runat="server" AssociatedUpdatePanelID="upD" DisplayAfter="50">
<ProgressTemplate>
<div id="Layer1" class="busy">
<img alt="Loading Data" src="<%=PathPrefix %>/Images/loading.gif" /><br />
Loading...
</div>
</ProgressTemplate>
</asp:UpdateProgress>
<script type="text/javascript" language="javascript">
var flag = false;
function pageLoad() {
if (!flag) {
document.getElementById('m_c_btnLoadData').click();
flag = true;
}
}
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
var postBackElement;
function InitializeRequest(sender, args) {
$get('m_c_upr').style.display = 'block';
}
function EndRequest(sender, args) {
$get('m_c_upr').style.display = 'none';
}
</script>