2011-09-22 29 views
2

我有一個用戶控件在UpdatePanel內執行回發後被動態加載到頁面。在UpdatePanel中回發後添加一個用戶控件,接下來是另一個回傳 - 如何獲得用戶控件中控件的輸入?

然後,我正在執行另一個保存回發,在那裏我想訪問該用戶控件中控件的用戶輸入(例如,每行都有複選框的網格)。

一個簡單的例子,如果這種情況會是這樣如下:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <div><asp:Button ID="ButtonAdd" runat="server" Text="Add User Control" OnClick="ButtonAdd_OnClick" /></div> 
     <div id="divContent" runat="server"></div> 
    </ContentTemplate> 
</asp:UpdatePanel> 
<asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
    <ContentTemplate> 
     <div><asp:Button ID="ButtonSave" runat="server" Text="Save" OnClick="ButtonSave_OnClick" /></div> 
    </ContentTemplate> 
</asp:UpdatePanel> 

和:

protected void ButtonAdd_OnClick(object sender, EventArgs e) 
{ 
    MyUserControl uc = Page.LoadControl("MyUserControl.ascx") as MyUserControl; 
    divContent.Controls.Add(uc); 
} 

protected void ButtonSave_OnClick(object sender, EventArgs e) 
{ 
    // Hopefully, get controls from within the user control's grid and save their input 
} 

的問題是,當點擊保存按鈕後,用戶控制了。這是可以理解的,我沒有問題再次創建和添加它 - 但我確實想訪問用戶輸入並保存它。我怎樣才能做到這一點?

回答

1

如果你想添加控件programatically然後選擇Page_Load(更優選)或Page_Init事件。您可以通過添加控件「靜態」(design time)和visible=false來解決您的問題,然後您可以開啓其可見性。

如果你想在你的文章中使用當前的方法,你必須使用技巧

MyUserControl uc; 

protected void Page_Load() 
{ 
    if(ViewState["isAdd"]!=null) 
    { 
     AddControl(); 
    } 
} 

void AddControl() 
{ 
    uc = Page.LoadControl("MyUserControl.ascx") as MyUserControl; 
    divContent.Controls.Add(uc); 
} 

protected void ButtonAdd_OnClick(object sender, EventArgs e) 
{ 
    if(ViewState["isAdd"]==null) 
     AddControl(); 
    ViewState["isAdd"]="yes"; 
} 
1

要訪問內部控件,您必須公開它們的屬性或使用FindControl

另外,正如您所提到的,您已將動態控件添加回每次回發的頁面。

Dynamic Web Controls, Postbacks, and View State

+0

我提到我明白它需要再次添加。但我的問題是需要訪問用戶控件內的控件的用戶輸入。 – Amit

+0

更新了我的答案。 –

相關問題