Как удалить тильду (~) из URL-адресов отображаемых изображений с помощью Razor? - PullRequest
2 голосов
/ 20 декабря 2011

В Umbraco (4.7.0) я использую небольшой скрипт Razor для визуализации изображений из свойства изображения, но даже если этот метод получает правильную информацию, изображения не будут отображаться; тильда всегда генерируется перед URL, но это фактически мешает отображению изображения. Есть ли способ (или, возможно, альтернативный метод рендеринга мультимедиа) для удаления тильды?

Это, по сути, то, что находится в скрипте бритвы, с primaryImage, являющимся свойством изображения:

<img class="primary-image" src="@Model.MediaById(Model.primaryImage).umbracoFile" alt="@Model.MediaById(Model.primaryImage).Name">

Этот фрагмент фактически находится в цикле foreach для визуализации изображения, если оно есть у свойства.

Ответы [ 2 ]

4 голосов
/ 20 декабря 2011

Предполагая, что код, который генерирует ваш ~/Path/To/Image.jpg:

@Model.MediaById(Model.primaryImage).umbracoFile

Вы можете заключить результат в вызове в Url.Content, который переведет результат на сайт-относительный путь.Например:

@* Assuming that Model.MediaById(Model.primaryImage).umbracoFile results in
   A string similar to ~/images/foo.jpg, the following will work: *@
<img src="@Url.Content(Model.MediaById(Model.primaryImage).umbracoFile)" ... />

Тем не менее, я бы порекомендовал сократить вызовы до MediaById и сохранить результат (в то же время проверяя по нулевой ссылке - на всякий случай) что-то вроде:

@{
  var media = Model.MediaById(Model.primaryImage);

  if (media != null){
    <img src="@Url.Content(media.umbracoFile)" ... />
  }
}
0 голосов
/ 20 декабря 2011

Если вы используете кодовый блок, вы можете получить изображение мультимедиа как объект DynamicMedia, что-то вроде следующего (еще не проверено) - также атрибут NiceUrl объекта мультимедиа будет URL-адресом без тильды:

        if(Model.HasProperty("primaryImage") && !String.IsNullOrEmpty(Model.primaryImage.ToString()))
        {
          int mediaId = Convert.ToInt32(Model.getProperty("primaryImage").Value.ToString());                                                                                      
          var mediaNode = new umbraco.cms.businesslogic.media.Media(mediaId);                                                                                           
          string mediaUrl = mediaNode.getProperty("umbracoFile").Value.ToString();
          string mediaName = mediaNode.Text;

            <img src="@mediaUrl" alt="@mediaName" />
        }

EDIT

Только что попробовал что-то очень похожее на ваш код, и он работал нормально, так что это может быть проблемой конфигурации:

@{
    var articleFirst = Model.umbNewsArticle.Take(1);
    var article1 = articleFirst.FirstOrDefault();

<img src="@article1.MediaById(article1.feature1Image).umbracoFile" alt="@article1.MediaById(article1.feature1Image).Text" height="63" width="78" />

}
...