我就窩在 「功能」 爲WebUserControls並把它們放到不同的TabPanels。他們對Page.Load沒有任何幫助,並且是隱形的。定義一個函數「BindData」來完成所有DataBinding /耗時的工作。當用戶更改ActiveTab(或默認活動標籤)時,使該UserControl可見並調用其BindData函數。
您需要圍繞UserControl的UpdatePanels(Updatemode = Conditional)和具有Eventname = ActiveTabChanged的Async-Postback-Trigger,以便只重新加載此面板。
例如在ASPX(MD_Location是用戶控件,由於篇幅所限,我只貼一個,但你必須想象他們中的很多):
<act:TabContainer ID="TabContainer1" runat="server" AutoPostBack="true" >
<act:TabPanel ID="TabLocation" runat="server" HeaderText="Locations">
<ContentTemplate>
<asp:UpdatePanel ID="UpdLocation" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<MD:MD_Location id="MD_Location" runat="server" Visible="false" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="TabContainer1" EventName="ActiveTabChanged" />
</Triggers>
</asp:UpdatePanel>
</ContentTemplate>
</act:TabPanel>
,並在代碼隱藏(對不起,只有VB.Net可用的,我希望你的想法):
Private Sub TabContainer1_ActiveTabChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabContainer1.ActiveTabChanged
If Me.TabContainer1.ActiveTab Is Me.TabLocation Then
Me.MasterDataType = "Locations"
End If
switchControlVisibility()
End Sub
Private Sub switchControlVisibility()
Select Case Me.MasterDataType.ToLower
Case "locations"
Me.MD_Location.Visible = True
Me.Lblheader2.Text = "Locations"
UpdHeader.Update()
Me.MD_Location.BindData() '<---- do time-consuming stuff
Me.UpdLocation.Update()
End Sub
例