2015-07-27 6 views
2

Это может быть вопрос о нобе, но я не мог понять, почему это не сработало. Я хочу очистить все формы внутри страницы после того, как пользователь ввел новую запись. Я называю это прямо перед тем, как мой метод OnClick заканчивается. Моя страница также не имеет родителя Master page, и я просто хочу перебирать Controls Я хочу, не все. Это мой код: (я знаю, что если я использую его, как это будет бардак с деталями DropDownList, я буду менять его после того, как я получаю логику получения контроля в странице)Как перебрать элементы управления внутри страницы asp.net?

public void ClearForms() 
     { 
      foreach (var item in Page.Controls) 
      { 
       if (item is TextBox) 
       { 
        ((TextBox)item).Text = String.Empty; 
       } 
       if (item is ListItem) 
       { 
        ((ListItem)item).Text = "Choose..."; 
        ((ListItem)item).Value = "-1"; 
       } 
      } 
     } 

Программа также не входит в операторы if. Я попытался получить тип item.GetType(), но он сказал, что он недействителен в контексте.

+1

http://stackoverflow.com/questions/4259850/loop-through-all-controls-on-asp-net-webpage –

ответ

2

Вы должны либо использовать рекурсивную функцию и передать управление в качестве параметра этой функции, то функция будет затем цикл по элементам управления внутри этого элемента управления, см Loop through all controls on asp.net webpage

Или вы должны поставить свои ListBoxes и текстовые поля внутри панели и проходным управления внутри этой панели, что-то вроде этого:

<asp:Panel ID="pnl" runat="server"> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
</asp:Panel> 

<asp:Button ID="btnClear" runat="server" Text="Clear" OnClick="btnClear_Click" /> 

и код позади:

protected void btnClear_Click(object sender, EventArgs e) 
    { 
     ClearForms(pnl); 
    } 

    public void ClearForms(Control c) 
    { 
     foreach (var item in c.Controls) 
     { 
      if (item is TextBox) 
      { 
       ((TextBox)item).Text = String.Empty; 
      } 
      if (item is ListItem) 
      { 
       ((ListItem)item).Text = "Choose..."; 
       ((ListItem)item).Value = "-1"; 
      } 
     } 
    } 

Пояснение к вашему делу: control.Controls извлекает только элементы управления первого уровня внутри элемента управления, поэтому при вызове Page.Controls он выбирает только те серверные элементы управления, которые находятся на первом уровне элементов вашей страницы.

надеюсь, что это помогает ...

+0

Это сработало, и теперь я понимаю, почему мой вариант не получилось :) Спасибо. – gadria

+0

Добро пожаловать Гадрия :) –