2013-07-08 150 views
0

我有一個.aspx頁面,它動態創建多個用戶控件,每個用戶控件都有自己的代碼,在用戶控件級別基於幾個事件觸發代碼。問題是,在特定用戶控件觸發事件之前,父頁面Load也會觸發。因爲每個控件都是動態添加的,所以這不是一個微不足道的處理,因爲每個控件都必須重新添加。每當用戶控件事件觸發時父頁加載事件觸發

我想能夠觸發UserControl事件而不強制在承載它的頁面上進行更新。我試圖將整個用戶控件放在UpdatePanel中,但用戶控件中的回發仍然強制父頁面加載。

下面是一些測試代碼,省略了某些部分,並且聲明性地添加了控件,而不是通過編程方式。

.ASPX父頁

<%@ Page Language="vb" CodeBehind="MyParent.aspx.vb" %> 
<%@ Register TagPrefix="uc" TagName="Control" Src="MyControl.ascx" %> 

<form id="form1" runat="server"> 
    <asp:ScriptManager runat="server"></asp:ScriptManager> 
    <asp:UpdatePanel runat="server"> 
     <ContentTemplate> 
      <uc:Control ID="Control1" runat="server" /> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</form> 

.ASCX用戶控制

<%@ Control Language="vb" CodeBehind="MyControl.ascx.vb" %> 
<p>Control Added</p> 
<asp:Button runat="server" Text="ForcePostBack"/> 

回答

2

這是怎麼ASP.NET WebForms page life-cycle作品。控制回發將導致主機(讀取:父母)頁面通過Page_Load。如果您不喜歡這種型號,那麼您應該考慮ASP.NET MVCclient-side解決方案,您可以在其中調用AJAX調用來獲取數據,然後通過模板邏輯進行客戶端渲染。

1

你可以通過像'IsFirstLoad'這樣的Session變量來避免它,然後僅當IsFirstLoad爲空(或true)時才渲染UCs?

此外,我發現在Page_Init中動態呈現的項目將通過PostBack持續存在,因此您不必重新呈現。不過,不知道這是否適用於UCs。