RDLC Report Viewer Control - Как открыть изображения в другом окне / вкладке

У меня есть изображения в базе данных (SQlServer 2008 R2) в столбце varbinary. Мой отчет разработан в ASP.net 3.5 в Visual Studio 2010. В своем отчете в таблице я использую изображение, задаю тип MIME для image/jpeg, источник изображения - база данных, и изображение отображается в отчете правильно. Все работает!! Теперь моя проблема в том, что я хотел бы добавить гиперссылку на это изображение, чтобы, когда пользователь нажимает на изображение, оно открывалось в другом окне / вкладке в исходном формате. Это поможет пользователю ближе познакомиться с изображением. Я пытался добавить гиперссылку - Перейти к URL - Выражение

="http://localhost:49170/MtkMobileDeposit_FailedTransaction/Account/ReportByUserName.aspx?BackImageOriginal=" & Поля!BackImageOriginal.Value

Но я не могу заставить его отображать только изображение. Вместо этого он отображает весь отчет в новой вкладке. Как мне сначала получить URL для работы изображений? Пожалуйста помоги.

Спасибо sdd

1 ответ

Решение

Лучше всего использовать httphandler для обработки вашего запроса.

Создайте ImageHandler.ashx, который будет принимать идентификатор записи. Затем вы можете получить байтовый массив изображения и вывести его на экран.

Ваш новый URL будет выглядеть

"/ImageHandler.ashx?Record_ID=" & Поля!RecordId.Value

public class ImageHandler : IHttpHandler
{

    public int Record_ID
    {
        get { return Convert.ToInt32(HttpContext.Current.Request.QueryString["Record_ID"]); }

    }

    public void ProcessRequest(HttpContext context)
    {
        // get image from database into a byte array
        Component.ImageController objImageController = new Component.ImageController();
        Component.ImageInfo objImageInfo = objImageController.getImage(Record_ID);
        byte[] byteArray = objImageInfo.photo;

        // output it to the screen
        context.Response.Clear();
        context.Response.ContentType = "image/jpeg";
        context.Response.BinaryWrite(byteArray);

        context.ApplicationInstance.CompleteRequest();

    }



    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
Другие вопросы по тегам