Почему ASP.Net добавляет атрибут "border" в asp: Image - PullRequest
2 голосов
/ 17 сентября 2009

Итак, у меня есть тег изображения asp.net:

<asp:Image runat="server" ImageUrl="~/Images/img.jpg" width="350px" height="250px" AlternateText="My Image" />

но выводит это:

<img src="Images/img.jpg" height="250" width="350" border="0" />

... валидатор XHTML считает, что элемента "border" не должно быть ... но его добавляет ASP.Net.

Я уверен, что этот вопрос задавался много раз прежде, но почему asp.net считает, что нужно добавить его, особенно потому, что он недействителен ??

Как этого можно избежать, чтобы оно подтвердилось?

Ответы [ 7 ]

2 голосов
/ 19 июня 2012

Я бы согласился с Дэном, тег img будет отображаться со стилем вместо border = "0", но после довольно небольшого исследования, проведенного мной, border = 0 исчезает только тогда, когда вы применяете стиль к элементу управления с помощью img {border: none}, либо во внешней таблице стилей, либо на той же странице, то, как происходит волшебство, выходило за рамки моего исследования. Тем не менее, я заметил, что валидатор все еще получает рамку = 0 в разметке, что означает, что asp.net визуализируется по-разному в зависимости от типа браузера (или агента браузера, я думаю), и для решения этой проблемы мне пришлось заставить asp всегда отображать «чистый» код, как показано здесь

http://blog.hmobius.com/post/2010/03/03/ASPNET-Part-9-Rendering-Cleaner-HTML.aspx

поэтому в моем случае я добавил в файл web.config

<pages controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID">

еще один момент, я использую тип документа html5, поэтому убедитесь, что тип страницы не является проблемой.

и моя страница проверяется.

2 голосов
/ 17 сентября 2009

Так работает веб-элемент управления изображениями ASP.NET. К сожалению, многие из встроенных веб-элементов управления ASP.NET не соответствуют стандартам и могут привести к тому, что страница не будет проверена. Адаптеры дружественного управления CSS - это доблестная попытка «исправить» иногда некорректный и не семантический HTML-код, генерируемый встроенными веб-элементами управления.

Вашей конкретной проблемы можно избежать, следуя совету в ответе на Как создать адаптер управления ImageButton.

1 голос
/ 17 сентября 2009

Вы используете ASP.NET 1.1? Потому что в версии 2.0 и выше тег изображения отображается как:

    <img src="/Images/img.jpg" alt="My Image" 
style="height:250px;width:350px;border-width:0px;" />

Я только что проверил это, и выше, что я получаю (используя Opera 10) с типом XHTML 1.0 Transitional. Поэтому я не уверен, почему вы получаете недопустимый HTML, если ASP.NET каким-то образом не определит ваш браузер как "нижний уровень".

  • Какой браузер вы используете?
  • Какая версия .net?
  • Какой у вас тип документа?
1 голос
/ 17 сентября 2009

Это не всегда недействительно. В старые времена мы все добавляли border = "0", чтобы избежать синей границы по умолчанию, когда изображение было связано. К сожалению, команда ASP.NET не посчитала нужным обновить элемент управления Image вместе с веб-стандартами.

Кстати, атрибут border - это далеко не единственный несовместимый HTML, который испускает ASP.NET.

1 голос
/ 17 сентября 2009

По умолчанию, если элемент <img> появляется внутри элемента <a>, <img> получает уродливую синюю рамку, обозначающую, что это ссылка.

border="0" - это старый способ (но простой, надежный и автономный) способ предотвратить это.

0 голосов
/ 14 ноября 2016

В случае, если вы не хотите связываться с веб-конфигурацией (как я это сделал), поскольку ориентация на другую инфраструктуру при рендеринге повлияет на все элементы управления рендеринга вашего проекта, а для больших проектов это не вариант, вы всегда используйте это решение «на странице», вставив эту строку в конец формы перед тегом закрытия тела (требуется jQuery):

<script type="text/javascript">$('#yourImageId').removeAttr("border");</script>

Использование этого не пройдет проверку HTML, лучший способ, который я нашел для проверки формы, это не использование элемента управления asp, а обычный тег img, делающий его доступным из кода с помощью свойства runat = "server":

<img ID="myImage" src="Images/img.jpg" height="250" width="350" runat="server"/>

Это решение пройдет проверку HTML, и вы сможете изменять атрибуты изображения из кода позади.

0 голосов
/ 17 сентября 2009

border="0" был необходим для Netscape 4, который не поддерживал обычный способ CSS сделать это правильно. Конечно, не так много в ASP.NET действительно будет работать с Netscape 4, поэтому такая попытка обратной совместимости довольно бессмысленна.

Между прочим, поскольку разметка элементов управления ASP.NET плохая, на самом деле она все еще выполняет анализ браузера в этот день и возраст: она пропустит связанное, но еще более недопустимое значение border = "0" на кнопках изображения. для браузеров это кажется «хорошим»: выбор из белого списка браузеров, который не включает валидатор HTML.

Обнаружение браузера - неправильная вещь, и большинство из нас прекратили делать это много лет назад, но ASP.NET по-прежнему делает это по умолчанию, если вы не используете восходящий clientTarget в объявлении страницы, чтобы остановить его. Уродливые вещи, MS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...