2013-01-31 44 views
3

我有一個擁有5個用戶控件的頁面。我想對他們做更多的事情,但現在我只想用下面的方法來計算它們。如何計算我在頁面中擁有的用戶控件的數量?

void btnFormSave_Click(object sender, EventArgs e) 
{ 
    int i = 0; 
    ControlCollection collection = Page.Controls; 
    foreach (Control ctr in collection) 
    { 
    if (ctr is UserControl) 
    { 
     i++; 
    } 
    } 
} 

當調試這個代碼,I = 1,並且控制是主頁(我不知道的是,主網頁是用戶控制)。

如何計算我的頁面上的用戶控件?

編輯

這是我的內容佔位符標記。

<asp:Content ID="cntMain" runat="Server" ContentPlaceHolderID="ContentMain"> 
+0

_你爲什麼需要計算用戶控件的數量? –

回答

1

編輯:用下面的代替我原來的,基於外的答案。

您可能需要遞歸到控件內的控件(可能是面板?)。

http://msdn.microsoft.com/en-us/library/yt340bh4(v=vs.100).aspx

這個例子只查找和 包含在Page對象的控件是頁面的直接子控件。它找不到 文本框,該文本框是控件的子項,該控件又是頁面的子項 。例如,如果您在頁面中添加了一個Panel控件,Panel 控件將成爲 Page所包含的HtmlForm控件的子項,並且可以在此示例中找到它。但是,如果您然後 將TextBox控件添加到Panel控件中,則TextBox控件 文本將不會被示例顯示,因爲它不是頁面的子項 或頁面子項的控件。更多 以這種方式行走控件的實際應用將會以 創建一個遞歸方法,可以調用它來遍歷每個控件遇到的控件集合。

編輯2:添加鏈接到SO上的遞歸控制搜索示例。

示例使用LINQ:https://stackoverflow.com/a/253962/704808

傳統例如:https://stackoverflow.com/a/4955836/704808

1

你只需要改變你往哪裏看的:

void btnFormSave_Click(object sender, EventArgs e) 
{ 
    int i = 0; 
    // here, look inside the form, and not on page. 
    ControlCollection collection = Page.Form.Controls; 
    foreach (Control ctr in collection) 
    { 
    if (ctr is UserControl) 
    { 
     i++; 
    } 
    } 
} 

我已經測試過,併爲我工作。

相關問題