Выделение всех пользовательских элементов управления на странице ASP.NET - PullRequest
1 голос
/ 03 декабря 2009

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

Тогда я выбрал другой подход. Я попытался обойти элементы управления страницы в методе PreRender базового класса страницы, который используется всеми страницами, и добавить div с рамкой для всех пользовательских элементов управления. Но я обнаружил, что невозможно добавить или удалить из коллекции элементов управления, если она содержит блоки кода (т. Е. <% ...%>).

Есть предложения?

спасибо

1 Ответ

0 голосов
/ 16 декабря 2009

Вот как вы можете выделить активный элемент управления вводом, который имеет фокус. Вам нужно обработать onfocus и onblur клиентские события элементов управления вводом. И применить или удалить стиль css для элемента управления, установив элементы управления className атрибут

Добавьте это в свой CSS-файл:

.highlight
{
  background-color: #fefbd2; /*highlight with yellow*/
  color: #000080;            /*make text blue*/
}

В вашем каталоге App_Code создайте вспомогательный класс, такой как

public static class Helpers
{
  /// <summary>
  /// Adds the onfocus and onblur attributes to all input controls found in the specified parent,
  /// to change their apperance with the control has the focus
  /// </summary>
  public static void SetInputControlsHighlight(Control container, string className, bool onlyTextBoxes)
  {
   foreach (Control ctl in container.Controls)
   {
     if ((onlyTextBoxes && ctl is TextBox) ||
          (!onlyTextBoxes && (ctl is TextBox || ctl is DropDownList ||
          ctl is ListBox || ctl is CheckBox || ctl is RadioButton ||
          ctl is RadioButtonList || ctl is CheckBoxList))) 
     {
        WebControl wctl = ctl as WebControl;
        wctl.Attributes.Add("onfocus", string.Format("this.className = '{0}';", className));
        wctl.Attributes.Add("onblur", "this.className = '';");
     }
     else
     {
        if (ctl.Controls.Count > 0)
           SetInputControlsHighlight(ctl, className, onlyTextBoxes);
     }
   }
  }
}

Затем просто переопределите метод OnLoad любой страницы.

protected override void OnLoad(EventArgs e)
{
  Helpers.SetInputControlsHighlight(this, "highlight", false);
  base.OnLoad(e);
}
...