我想通了。爲了局部回傳通過一個UpdatePanel的服務器,而不使用隱藏的控制,用jQuery做到這一點:
<script type="text/javascript">
$(document).ready(function() {
__doPostBack('<%=UpdatePanel1.ClientID %>');
});
</script>
這會盡快進行局部回傳,以防止與ID UpdatePanel1在UpdatePanel服務器作爲HTML DOM已準備就緒。然後,您可以使用ASP.NET頁面生命週期來掛接適合您的任何事件。我迷上到更新面板的加載事件:
protected void UpdatePanel1_Load(object sender, EventArgs e)
{
if (Page.IsPostBack && Session["InitializedKey"] == null)
{
Session["InitializedKey"] = true;
// do your initialization stuff here
}
}
上面的代碼將網頁是否回發只運行和會話變量。現在,當用戶刷新頁面時,必須清除會話變量,因爲此處的意圖是在第一個回發和僅第一個回發中運行此代碼。如此清晰的會話變量在Page_Load:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
Session[initializedKey] = null;
}
如果你想顯示進度指標的頁面是在局部回傳,這樣做的javascript:
<script type="text/javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args) {
if (args._postBackElement.id == '<%=UpdatePanel1.ClientID %>') {
$get('Progress').className = 'Progress';
}
}
function EndRequestHandler(sender, args) {
if (sender._postBackSettings.sourceElement.id == '<%=UpdatePanel1.ClientID %>') {
$get('Progress').className = 'Hidden';
}
}
</script>
這需要用div標籤ID「Progress」以及你想在該div內展示的內容。您還需要一些CSS來在名爲Hidden和Progress的類中的div標籤上設置顯示和可見樣式。不要忘記對部分回發進行錯誤處理!