Помимо группировки всех элементов управления в один контейнерный элемент управления, не существует простого способа найти группу элементов управления с данным свойством в коде на стороне сервера ASP.NET.
На стороне клиента вы можете использовать что-то вроде jQuery , чтобы найти эти элементы и скрыть их:
$(".instructions").hide();
Я бы, вероятно, сделал это в ответ, когда страница полностью загружена:
$(document).ready(function() {
$(".instructions").hide();
});
Недостатком скрытия элементов в Javascript является то, что если данных достаточно, это может занять секунду и вызвать мерцание контента. Другое отличие состоит в том, что сокрытие контента на стороне клиента не удаляет его из DOM - контент там просто скрыт. Скрытие элементов управления на стороне сервера предотвращает передачу их содержимого в HTML.
Делать то же самое в C # немного сложнее - требуется рекурсивный обход дерева управления и поиск элементов в коллекции Control
, которые соответствуют. Это достаточно распространенная операция, поэтому полезная функция полезна. Синтаксис итератора C # (возвращение урожая) помогает сделать это чистым:
// utility method to recursively find controls matching a predicate
IEnumerable<Control> FindRecursive( Control c, Func<Control,bool> predicate )
{
if( predicate( c ) )
yield return c;
foreach( var child in c.Controls )
{
if( predicate( c ) )
yield return c;
}
foreach( var child in c.Controls )
foreach( var match in FindRecursive( c, predicate ) )
yield return match;
}
// use the utility method to find matching controls...
FindRecursive( Page, c => (c is WebControl) &&
((WebControl)c).CssClass == "instructions" );
Теперь скрыть элементы управления довольно просто:
foreach( WebControl c in FindRecursive( Page, c => (c is WebControl) &&
((WebControl)c).CssClass == "instructions" ) )
{
c.Visible = false;
}