Браузеры действуют по-разному на привязке с изображением на MVC3 Razor - PullRequest
3 голосов
/ 02 октября 2011

мир! У меня есть странная вещь с тегом "а". Основная идея - сделать что-то вроде этого: <a href="/*Retrieve an original sized image from database*/"><img src="/*Retrieve an original sized image and resize to thumbnail*/"/> </a>.

Это то, что мне нужно для реализации некоторых плагинов для масштабирования изображений jQuery. У меня есть 2 способа - один просто получает изображение из БД, другой - эскиз.

Проблема в поведении браузера, отличающемся от моих действий: FF, Chrome, Opera показывает оригинальное изображение в другом окне (как и ожидалось). Safari предлагает загрузить jpg-файл с именем «GetImageThumbnail», а IE предлагает загрузить неизвестный файл с именем GetImageThumbnail (открывается как изображение в формате jpeg).

Вот якорь href text: "/Image/GetFullSizedImage?goodId=20" - одинаково во всех браузерах.

Это помощник в представлении: @Html.GetImageLinkWithInnerImage(Model.Id).

Вот вспомогательная реализация (может быть полезна для людей, которые хотят создавать привязки и изображения во вспомогательных методах:)

 public static MvcHtmlString GetImageLinkWithInnerImage(this HtmlHelper helper, int goodid)
   {
       var controller = helper.ViewContext.Controller as Controller;
       if (controller != null)
       {
           var urlHelper = controller.Url;
           var photoUrl = urlHelper.Action("GetFullSizedImage", "Image", new { goodId = goodid });
           var anchorBuilder = new TagBuilder("a");
           anchorBuilder.MergeAttribute("href", photoUrl + " ");
           var innerPhotoUrl = urlHelper.Action("GetImageThumbnail", "Image", new { goodId = goodid });
           var imgBuilder = new TagBuilder("img");
           imgBuilder.MergeAttribute("src", innerPhotoUrl);
           imgBuilder.MergeAttribute("alt", "Фото товара");
           anchorBuilder.InnerHtml = imgBuilder.ToString(TagRenderMode.SelfClosing);
           return MvcHtmlString.Create(anchorBuilder.ToString());
       }
       return null;
   }

И метод извлекает изображение из БД:

 public FileContentResult GetFullSizedImage(int goodId)
    {
        byte[] imageData = _db.GetGood(goodId).Image;

        if (imageData != null)
        {
            int imageWidth;
            int imageHeight;
            var imageFile = GetImageFromBytes(imageData, out imageWidth, out imageHeight);

            return ImageReadyFileContentResult(imageWidth, imageFile, imageHeight);
        }

        return NoPhotoFileContentResult();
    }

Это вывод HTML:

<a href="/Image/GetFullSizedImage?goodId=20 "><img alt="Фото товара" src="/Image/GetImageThumbnail?goodId=20" /></a>

Что я делаю не так?

1 Ответ

1 голос
/ 03 октября 2011

В методе «ImageReadyFileContentResult ()» укажите тип содержимого.

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