将所有控件放入 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>