Столкнулся с проблемой на ровном месте:
Мне нужно вывести на страницу график. График я формирую с помощью System.Web.Helpers
(объект класса Chart
) и сохраняю в файл на диске.
Потом в PartialView
через Ajax
запрос хочу вывести изображение на страницу.
Столкнулся с тем, что проект не выводит изображения. Вообще никакие. Контроллер отрабатывает, изображение на диске - то, которое нужно, а вот в частичное представление я его вывести не могу.
Что я делаю не так?
Контроллер (опущен конструктор):
public ActionResult Index(string url)
{
manager = new VMManager();
manager.VM = (SiteVM)manager.GetVM(url);
var tempvm = manager.VM;
return View(tempvm);
}
// рисование графика:
public ActionResult Wrapper (string pattern)
{
if (pattern == "test") return null;
Thread.Sleep(500);
string param = pattern;
var PVM = manager.VM.PageResults.FirstOrDefault(x => x.PageAddress == pattern);
var filepath = @"~/Views/Tool/chart.jpg";
// if (System.IO.File.Exists(filepath)) System.IO.File.Delete(filepath);
var chart = new System.Web.Helpers.Chart(width: 700, height: 300, theme: ChartTheme.Green)
.AddTitle("Графическое представление времени обработки запроса")
.AddSeries(
name: "graph",
chartType: "Line",
xValue: new[] { "запрос 1", "запрос 2", "запрос 3", "запрос 4", "запрос 5" },
yValues: PVM.AttemptsTime.ToArray())
// .Write();
.Save(path: filepath);
return PartialView("ShowPageResultInChart", new { path = filepath });
}
Основное представление (фрагменты):
Здесь должен быть выведен график. Это строчка в dive
@Html.Action("Wrapper", new { pattern = "test" })
Здесь вызывается Ajax-запрос:
@foreach (var item in Model.PageResults)
{
<tr>
<td>
@Ajax.ActionLink(item.PageAddress, "Wrapper", new { pattern = item.PageAddress },
new AjaxOptions
{
UpdateTargetId = "ChartData",
LoadingElementId = "LoadingIndicator"
}
)
</td>
Частичное представление - одна строка, тэг img: (даю только внутренности тэга img)
img src="chart.jpg" alt="Graph"
Файл есть, студия его тоже видит. Но на страницу не выводит. Ни Firefox, ни Chrome. Пробовал абсолютный путь не помогло. Пробовал "левый" рисунок (думал, может этот блокируется методом контроллера) - не помогло. В сети ответа тоже не нашел.
Проект создавался как Web->ASP.NET->Empty. Может в настройках проекта что-то включить надо - не знаю
Во-первых. Не складывайте изображения в подпапки для Views. По умолчанию в web.config для папки Views идёт правило:
<system.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
Поэтому картинку вы там не сможете увидеть. Положите картинку в какую-нибудь другую папку, например, в Content.
Во-вторых о текущем каталоге. Если вы открыли в браузере url https://localhost:12345/Product/Detailed?productID=1 то текущий каталог это никак не ~/Views/Product/ -- а текущий каталог это /Product/ и Views вообще ни при чём, забудьте о нём. Вот если у вас картинка chart.jpg лежит в каталоге /Products то тогда вы можете на странице /Product/Detailed подключать по относительному пути src="chart.jpg". Не уверены? Прописывайте абсолютный url от корня сайта src="/Product/chart.jpg"
И если не уверены, то прописывайте абсолютные url к картинке. А для начала -- просто откройте в браузере url картинки, чтобы увидеть, что она там реально есть.
И ещё, на будущее. Лучше создать сразу виртуальную папку для автоматически сгенерированных картинок. И гит не будет видеть лишние файлы и на реальном хостинге удобно.
Использую Gatsby js версии 10 для своего приложения
Имеется блок header, и при скролле, когда header уже не видно, нужно сделать header фиксированным, чтобы его было постоянно видноЯ решил это так:
Помогите сделать вывод и правильно вписать массивВот задание: Дан массив целых чисел
Имеется готовый код на jquery, реализующий гамбургер меню в магазине на OpencartНо гамбургер функционирует при любом разрешении экрана, как можно...