asp.net: предотвращение создания идентификаторов управления сервером - PullRequest
1 голос
/ 13 февраля 2009

Проблема

При использовании серверного элемента управления asp.net автоматически генерируются атрибуты идентификатора, такие как следующие.

<img id="ctl00_body_ULRepeater_ctl01_LIRepeater_ctl00_PartImg" src="img.png" />

Хотя я не против атрибутов id в целом, я стараюсь избегать использования этих излишне многословных типов имен и использую краткие описательные имена.

Вопрос

Могу ли я остановить asp.net от генерации этих атрибутов id? Они выглядят ужасно, и если я сгенерирую много элементов с помощью повторителя или чего-то еще, они действительно добавят немного веса страницы. Как мне от них избавиться?

Примечания

Я использую asp.net 3.0 в Visual Studio 2008.

[обновление]

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

Ответы [ 3 ]

3 голосов
/ 13 февраля 2009

Я считаю, что одной из функций asp.net 4.0 станет возможность лучше контролировать генерируемые идентификаторы. На данный момент вы получите искажение имени для любого сгенерированного сервером элемента управления. Это то, что позволяет asp.net гарантировать уникальность идентификатора вашего элемента управления.

Вы всегда можете использовать прямую разметку HTML (не runat = server), чтобы избежать этой проблемы. Вы бы пожертвовали простотой использования для страницы с более легким весом.

1 голос
/ 02 ноября 2010

Вы можете полностью скрыть эти атрибуты id, установив для свойства каждого элемента управления значение NULL во время выполнения, например,

Private Sub repeNewsletters_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles repeNewsletters.ItemDataBound

    If e.Item.DataItem Is Nothing Then
        Return
    End If

    Dim hlDetails = DirectCast(e.Item.FindControl("hlDetails"), System.Web.UI.WebControls.HyperLink)

    hlDetails.ID = Nothing

конец суб

0 голосов
/ 14 февраля 2009

На данный момент ControlID являются свойствами ReadOnly. В следующем выпуске веб-форм ASP.NET (с .NET 4.0) это будет настраиваемое свойство с использованием ряда различных методов (таких как static, наследовать и т.

...