ASP.NET - Цикл все компоненты HTML на текущей странице

Мне бы хотелось пойти все элементы страницы ASP.Net (элементы HTML) и управлять его текстовым свойством / значение. Как я мог сделать это?

Я проверял, и свойство это. Страница. Форма. Средства управления, по-видимому, получают все элементы, но я только разбил бы на страницы элементы, которые поймали событие. Делает у любого есть любая идея.

Я помещу пример кода, что я в настоящее время изучаю и пробую адаптер за свои потребности.

Спасибо

 string x = String.Empty;
 string y = String.Empty;

 foreach (Control ctrl in this.Page.Form.Controls){
     if (ctrl is TextBox){
        x += ((TextBox)(ctrl)).ID + ((TextBox)(ctrl)).Parent + "\n";
     } else {
        y += ctrl.GetType().Name + ctrl.GetType().Namespace + "\n";
     }
 }

Obs.: Я использую некоторые компоненты компонентов Telerik.

1
задан Paulo Henrique 12 July 2010 в 18:31
поделиться

3 ответа

Элементы управления на странице хранятся в древовидной структуре данных. Для этого можно использовать рекурсивный метод:

    private void SetText(ControlCollection controls, String textToSet)
    {
        foreach(Control c in controls)
        {
            if (c is ITextControl)
                ((ITextControl)c).Text = textToSet;

            if (c.HasControls())
                SetText(c.Controls, textToSet);
        }
    }

и вызвать этот метод где-нибудь, скажем, в событии OnPreRender (чтобы убедиться, что вы получили все элементы управления, которые были добавлены на страницу) и передать Page.Controls ControlCollection:

    protected override void OnPreRenderComplete(EventArgs e)
    {
        base.OnPreRenderComplete(e);
        SetText(Page.Controls, "new text");
    }
1
ответ дан 2 September 2019 в 23:07
поделиться

Я попробую ответить, хотя я не уверен, что это именно то, что вам нужно (см. Мои комментарии к вопросу).

Если вы хотите быстро обработать все текстовые поля формы (скажем) одним способом, а все его DropDownLists - другим способом, тогда то, что вы ищите, может быть OfType

DoSomethingWithAllTextBoxes( Page.Form.Controls.OfType<TextBox>() );
DoSomethingWithAllDropDownLists( Page.Form.Controls.OfType<DropDownList>() );

private void DoSomethingWithAllTextBoxes( IEnumerable<TextBox> textboxes) {
    foreach(TextBox txt in textboxes) {
       txt.Text = "Modified";
    }
}

Если вы ищете привязку событий, вы можете запустить такой код в OnInit

protected override void OnInit(EventArgs e) {

    foreach(TextBox txt in Page.Form.Controls.OfType<TextBox>() ) {
       txt.OnTextChanged += TextChangedEventListener;
    }        

    base.OnInit(e);
}
1
ответ дан 2 September 2019 в 23:07
поделиться

Прикрепите нужные вам элементы к событию, а затем действуйте в соответствии с ними при его наступлении. Этот пример приведен для демонстрации, но вы можете определить пользовательское событие.

ASPX:

   <asp:TextBox ID="TextBox1" AutoPostBack="true" runat="server"
        ontextchanged="TextBox1_TextChanged"></asp:TextBox>
   <asp:TextBox ID="TextBox2" AutoPostBack="true" runat="server"
       ontextchanged="TextBox1_TextChanged"></asp:TextBox>

Code-Behind:

 protected void TextBox1_TextChanged(object sender, EventArgs e)
 {
     TextBox tb = sender as TextBox;
     //do something
 }
0
ответ дан 2 September 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: