перебирать ASP: кнопки - PullRequest
       31

перебирать ASP: кнопки

0 голосов
/ 03 октября 2018

Я новичок, и у меня возникла проблема с ASP: кнопки управления.

На странице около 60 кнопок, типичный XAML выглядит следующим образом:

<asp:Button class="tile" ID="Button1" runat="server" Text="Domains"/>

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

Я нашел много предложений здесь и там, но ничего не работает.Мой код:

for (int i = 1; i < 59; i++)
{ 
    String butt = String.Format("Button{0}", i);
    var btn = FindControl(butt);
    btn.Visible = false;
}

Ошибка в том, что нет ссылки на объект.БТН является нулевым.Я попытался проверить элемент в работающем приложении, и он говорит, что идентификатор элемента "MainContent_Button1" - попытался это тоже не работает.Другая вещь, которую я попробовал, это

foreach(var button in this.Controls.OfType<Button>())
{
    button.Visible = false;
}

Я пришел к выводу, что asp: button это a) не элемент управления типа кнопки b) его идентификатор каким-то образом генерируется при запуске приложения, и поэтому нет никакого контроля сid Button1 будет найдено.

Может кто-нибудь объяснить мне это?Мне бы очень хотелось понять, почему он так себя ведет и какова цель этого поведения.

Спасибо

Редактировать: Я даже пытался полностью удалить цикл и изменить одну конкретную кнопку, используя метод FindControl.Тоже не работает.

 var btn = FindControl("Button1");
 btn.Visible = false;

result: System.NullReferenceException: 'Ссылка на объект не установлена ​​для экземпляра объекта.'

1 Ответ

0 голосов
/ 03 октября 2018

Похоже, вы используете мастер-страницу.Использование FindControl на главной странице работает несколько иначе, чем на обычной странице. Сначала необходимо найти правильный ContentPlaceHolder, в котором расположены кнопки, и использовать FindControl для этого ContentPlaceHolder.

ContentPlaceHolder cph = Master.FindControl("MainContent") as ContentPlaceHolder;

for (int i = 1; i < 9; i++)
{
    String butt = String.Format("Button{0}", i);
    var btn = cph.FindControl(butt);
    btn.Visible = false;
}
...