Проблема

Если у вас есть серверный контрол, с длинным атрибутом ID, либо он лежит внутри множества других контролов (что приводит к очень длинным ID), то этот ID всегда  выводится в конечный HTML выдаваемый клиенту в неком преобразованном виде. Если у вас на странице много таких контролов, скажем внутри Repeater лежит некий Label, то в итоге объем сгенеренных в HTML коде аттрибутов ID может быть существенным. При этом довольно часто, эти ID на клиентской стороне не нужны вовсе, обычно это касается ссылок, картинок, текста (если вы не производите никакие AJAX манипуляции с этими элементами на клиентской стороне).

Решение

Довольно красивое решение было найдено в блоге salvo

На этапе PreRender, обнуляем значение ID серверного контрола. Что приводит к тому, что в итоге ID не передается клиенту.

Для упрощения этой задачи, создаем универсальный обработчик (например в неком базовом классе страниц и контролов сайта):

public void DeleteID(object sender, EventArgs e)

        {

            if (sender is Control)

            {

                Control c = (Control)sender;

                c.ID = null;

            }

        } 

 Затем указываем его в атрибуте серверного контрола:

<asp:Label ID="MyLongIDLabelForName" runat="server" Text="Salvo" OnPreRender="DeleteID"></asp:Label> 


maqdev.com

сообщения с ограниченным временем жизни