Отображение случайно выбранного изображения на веб-странице ASP.NET - Делаем путь к изображению абсолютным

ОГЛАВЛЕНИЕ

Делаем путь к изображению абсолютным

Одним из недостатков такого использования разметки является то, что атрибут src элемента img является относительным. То есть он не начинается с / , так что путь к изображению является относительным по отношению к пути  текущей ASP.NET-странице. К примеру, в XML-файле с содержимым один путь к изображению установлен в "Images/HeaderImages/1000IslandLake.jpg". Если ASP.NET-страница, использующая данную мастер-страницу, находится в корневом каталоге приложения, то все будет работать отлично. Но что произойдет, если позже мы создадим подкаталог, названный, к примеру, /sales, и затем мы добавим в него ASP.NET-страницу, использующую мастер-страницу ImagesFromContentRotator.master? Если она решит отобразить то же самое изображение озер, оно будет искать его в файле /sales/Images/HeaderImages/1000IslandLake.jpg, который не существует!

Если мы используем серверный элемент управления Image, то мы можем использовать символ ~ в свойстве ImageUrl следующим образом: "~/Image/HeaderImages/1000Islandlake.jpg". Во время выполнения символ ~ будет автоматически заменен на соответствующее значение пути к корневому каталогу. Элемент управления ContentRotator порождает статический результат, но вызывает событие после того, как оно выберет изображения для вывода. Мы можем создать обработчик для этого события и корректно настроить путь к изображению. Для того чтобы выполнить это, начните с обновления пути к каждому изображению в атрибуте src, чтобы они начинались "~/". К примеру, измените путь к изображению с "Images/HeaderImages/1000IslandLake.jpg" на "~/Images/HeaderImages/1000IslandLake.jpg". Символ ~ был выбран для того, чтобы синтаксис имитировал то, что в элементе управления Image. Вы могли бы использовать какой-нибудь символ, который не был использован в разметке (например $.)

Далее, создайте обработчик для события ContentCreated элемента ContentRotator класса code-behind мастер-страницы. В данном обработчике мы просто заменим все экземпляры символа ~ с путем к веб-приложению (доступным в Request.ApplicationPath):

Protected Sub ContentRotator1_ContentCreated(ByVal sender As Object, ByVal e As skmContentRotator.ContentCreatedEventArgs) Handles ContentRotator1.ContentCreated
   'Устанавливаем пути к изображениям
   e.ContentItem.Content = e.ContentItem.Content.Replace("~", Request.ApplicationPath)
End Sub

В дополнение к событию ContentCreated, элемент управления ContentRotator может также выводить динамическое содержимое при помощи пользовательских элементов управления (User Controls).

Scott Mitchell

Исходный код примеров