Этот тег определенно не будет делать то, что вы думаете:
<img src='~/images/user_images/<%# Eval ("Avatar") %>'
width="20px"
alt='<%# Eval ("UserName") %>' />
Вы используете нотацию относительного пути на стороне сервера с символом ~
, что ничего не значит на стороне клиента. Браузер не будет знать, где находится этот файл.
Быстрый способ решить эту проблему - добавить runat="server"
к тегу, который укажет движку ASP.NET, что тег должен быть обработан перед отображением его клиенту. Это приведет к тому, что пути на стороне сервера будут преобразованы в значимые пути на стороне клиента (во всяком случае, насколько это возможно, в любом случае, что может в этом случае). Другой вариант - использовать относительный путь к странице, например ../images/user_images/
(или любой другой путь).
Что касается того, почему тег <asp:Image>
не работает, можете ли вы показать визуализированный вывод HTML этого тега? Если изображение не отображается в веб-браузере, это может быть по ряду причин. Тег может не отображаться так, как вы думаете. Или изображение может быть недоступно из Интернета. Или путь может быть неправильным. И т.д.
Редактировать: Исходя из вашего комментария к вопросу выше, ваш тег <asp:Image>
выглядит так:
<img id="ContentPlaceHolder1_ListView3_DisplayAvatarShout_1"
src="images/user_images/%3C%25#%20Eval%20(%22Avatar%22)%20%25%3E"
alt="rokky" style="width:20px;" />
Для отладки вашей самой большой подсказки является то, что Eval
работает для Username
, но не для Avatar
. Спросите себя, в чем разница между ними? Единственное отличие, которое я вижу, состоит в том, что один из них вызывается сам по себе, а другой (тот, который не работает) является частью большой строки.
К счастью, метод Eval
имеет способ справиться с этим. Вместо этого:
ImageUrl='~/images/user_images/<%# Eval("Avatar") %>'
Попробуйте это:
ImageUrl='<%# Eval("Avatar", "~/images/user_images/{0}") %>'
Это более чистый способ ввода значения Avatar
в оставшуюся часть строки.