Для меня проблема здесь в том, что вы пытаетесь объединить слишком много вещей (что показывает, поскольку вопрос содержит несколько разных вопросов).Запрос изображения является отдельным запросом от запроса HTML.Посмотрите на это так - что произойдет, если я скопирую URL-адрес изображения и отправлю его кому-то еще, потому что я хочу показать им диаграмму, а не остальную часть страницы?Горячее связывание происходит.
Чтобы справиться с этим, вы не можете сгенерировать изображение, когда кто-то нажимает на контроллер для HTML-страницы.Вы должны сделать это, когда второй запрос сделан специально для графика.Таким образом, ваш запрос изображения на самом деле должен выглядеть очень похоже на запрос самой веб-страницы: он должен содержать достаточно информации в URL, чтобы контроллер, обслуживающий изображение, мог получить необходимые данные модели из базы данных (или откуда бы он ни поступил)для того, чтобы сгенерировать диаграмму.Поэтому, если действие контроллера, которое создает веб-страницу, на которой вы хотите отобразить диаграмму, выглядит следующим образом:
public ActionResult Details(int id)
Затем в том же контроллере вам нужно другое действие, подобное этому:
public ActionResult DetailsChart(int id)
второй - получить данные, использовать библиотеку диаграмм, которая вам нужна, чтобы создать изображение, а затем вернуть его.Вы будете ссылаться на него следующим образом:
<img src="/SomeController/DetailsChart/6" />
Таким образом, вы получите график на веб-странице или там, где он был запрошен.Теперь, чтобы отобразить его, не считывая изображение с диска, вы должны указать своему элементу управления диаграммы не записывать на диск.Если у него есть другой MakeChart (), который записывает в Stream
, тогда все готово, потому что вы можете записать его в Response.OutputStream
(или в MemoryStream, если не хотите сразу записывать его в ответ HTTP).по какой-то причине).
Что касается ImageMap ... это опять другое дело.ImageMaps - это либо HTML-код, размещенный на странице, который сообщает браузеру, куда идти, в зависимости от того, где пользователь нажимает, либо серверный, где вам нужно третье действие контроллера, чтобы щелкнуть изображение и обработать его.Вы не отправляете это одновременно с отправкой изображения, потому что это не данные изображения.