Мне бы хотелось пойти все элементы страницы 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.
Элементы управления на странице хранятся в древовидной структуре данных. Для этого можно использовать рекурсивный метод:
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");
}
Я попробую ответить, хотя я не уверен, что это именно то, что вам нужно (см. Мои комментарии к вопросу).
Если вы хотите быстро обработать все текстовые поля
формы (скажем) одним способом, а все его 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);
}
Прикрепите нужные вам элементы к событию, а затем действуйте в соответствии с ними при его наступлении. Этот пример приведен для демонстрации, но вы можете определить пользовательское событие.
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
}