25.08.22, partialUpdate, streamUpdate, ChartDirector, Giga
https://gsgiga.blogspot.com/2025/08/250822-partialupdate-streamupdate-mvc.html
25.08.22, partialUpdate, streamUpdate, ChartDirector, Giga
https://gsgiga.blogspot.com/2025/08/250822-partialupdate-streamupdate-mvc.html
https://ask.chadgpt.ru/share/be4cddc1-2afc-43c5-9f71-b40d71d688b9
D:\VC2508\Charts\WpfChartSln\WpfChartDir\WpfChartDir.sln
D:\VC2508\Charts\WpfChartSln\WpfChartDir\RazorChartDirApp08\RazorChartDirApp08.csproj - work well
Работает с локальным Rendering
Разберу по частям, зачем здесь каждый фрагмент, как работает обновление, и почему редактор подчеркивает приведение типа (RazorChartViewer)ViewData["Viewer"] зеленой волной.
Что делает страница
Почему обновление без мерцания
Про адрес @Url.Page("SimpleLine", "ChartHtml")
Зачем ViewData["Viewer"]
Почему редактор подчеркивает (RazorChartViewer)ViewData["Viewer"] зеленой волной
Как убрать предупреждение корректно
Типичные места, где еще появляются такие предупреждения
Итого
Что можно сделать:
Итого: это не ошибка и не влияет на ваш функционал графиков. Самый быстрый вариант — отключить Browser Link в VS или убрать UseBrowserLink в Development.
--------------------------------------------------------------------------------------------
D:\VC2508\Charts\WpfChartSln\WpfChartDir\RazorChartDirApp07\RazorChartDirApp07.csproj
Под “JS-таймером” я имел в виду обычные функции таймера в браузере: setInterval и setTimeout. Они просто планируют вызов вашего кода через заданный интервал. Сейчас вы используете таймер, но дергаете window.location.reload(), из‑за этого перезагружается вся страница, мигает меню и иконка Refresh.
Если цель — автообновлять только график, оставив страницу и меню статичными, замените полную перезагрузку на частичную подгрузку HTML или данных и обновление DOM. Есть три рабочих варианта под Razor Pages + ChartDirector:
Пример:
Razor (страница с меню и контейнером):
@section Scripts {
<script>
async function refreshChart() {
try {
const r = await fetch('@Url.Page("SimpleLine", null, new { handler
= "Chart" }, Context.Request.Scheme)', { cache: "no-store" });
const html = await r.text();
document.getElementById('chartHost').innerHTML = html;
} catch(e) {
console.error(e);
}
}
refreshChart();
const timerId = setInterval(refreshChart, 1000);
// при навигации можно clearInterval(timerId)
</script>
}
C# (в той же Razor Page):
public IActionResult OnGetChart()
{
ViewData["Title"] = "Simple Line Chart";
var viewer = new RazorChartViewer(HttpContext, "chart1");
createChart(viewer);
// Вернем только HTML графика без layout
return Content(viewer.RenderHTML(), "text/html");
}
Почему мигал браузер
Минимальная правка вашего кода
@section Scripts {
<script>
async function refreshChart() {
try {
const res = await fetch('@Url.Page("SimpleLine", null, new {
handler = "Chart" }, Context.Request.Scheme)', { cache: "no-store" });
const html = await res.text();
document.getElementById('chartHost').innerHTML = html;
} catch (err) {
console.error('Refresh failed', err);
}
}
refreshChart();
const timerId = setInterval(refreshChart, 1000);
</script>
}
Так вы сохраните стабильный layout, а обновляться будет только график. Если расскажете, какой HTML генерирует RazorChartViewer (img или inline svg), подскажу самый простой способ адресной подмены. Если хотите совсем без опроса, можно перейти на SignalR/WebSocket и пушить обновления по событию.
RazorPage, Project, ChartDirector, Sine
D:\VC2508\Charts\WpfChartSln\WpfChartDir\WpfChartDir.sln
D:\VC2508\Charts\WpfChartSln\WpfChartDir\RazorChartDirApp07\RazorChartDirApp07.csproj
ChartDirector, Синусоида, work well
Page work well
---------------------------------------------------------------------------
SimpleLine.cshtml
@* @page
@model RazorChartDirApp07.Pages.SimpleLineModel
@{
} *@
@page
@model SimpleLineModel
@using ChartDirector
@{
Layout = "_Layout";
}
@{
if (ViewBag.Viewer is Array)
{
// Display multiple charts
for (int i = 0; i < ViewBag.Viewer.Length; ++i)
{
@:@Html.Raw(ViewBag.Viewer[i].RenderHTML())
}
}
else
{
// Display one chart only
@:@Html.Raw(ViewBag.Viewer.RenderHTML())
}
}
@section Scripts {
<script>
setTimeout(function () { window.location.reload(); }, 1000);
</script>
}
-------------------------------
SimpleLine.cshtml.cs
------------------------------
using ChartDirector;
using LinSpace;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using RazorChartDirApp07.Services;
namespace RazorChartDirApp07.Pages
{
public class SimpleLineModel : PageModel
{
private readonly IRunningSineState _state;
private readonly ILogger<IndexModel> _logger;
public SimpleLineModel(IRunningSineState state, ILogger<IndexModel> logger)
{
_state = state;
_logger = logger;
}
public void OnGet()
{
ViewData["Title"] = "Simple Line Chart";
RazorChartViewer viewer = new RazorChartViewer(HttpContext, "chart1");
ViewData["Viewer"] = viewer;
createChart(viewer);
}
private void createChart(RazorChartViewer viewer)
{
_logger.Log(LogLevel.Information, "CurrentIndex: " + _state.CurrentIndex.ToString());
var dataArg = MathSeries.Linspace(0.0, 2 * Math.PI, 36, _state.CurrentIndex);
var data = MathSeries.Evaluate(dataArg, Math.Sin);
var nextIndex = _state.NextIndex(36);
_logger.Log(LogLevel.Information, "CurrentIndex: " + _state.CurrentIndex.ToString());
// The labels for the line chart
string[] labels = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
"13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24",
"25", "26", "27","28", "29", "30", "31","32","33", "34", "35"};
// Create a XYChart object of size 250 x 250 pixels
XYChart c = new XYChart(450, 450);
// Set the plotarea at (30, 20) and of size 200 x 200 pixels
c.setPlotArea(30, 20, 400, 400);
// Add a line chart layer using the given data
c.addLineLayer(data);
// Set the labels on the x axis.
c.xAxis().setLabels(labels);
// Display 1 out of 3 labels on the x-axis.
c.xAxis().setLabelStep(3);
// Output the chart
viewer.Image = c.makeWebImage(Chart.SVG);
// Include tool tip for the chart
viewer.ImageMap = c.getHTMLImageMap("", "",
"title='Hour {xLabel}: Traffic {value} GBytes'");
}
}
}
WpfChartSln, Projects
D:\VC2508\Charts\WpfChartSln\WpfChartDir\WpfChartDir.sln
Simple Line Chart
BlazorServChartApp01.csproj - work
BlazorServChartApp07.csproj - work
----------------------------------------------------
RazorChartDirApp01.csproj - Symbol Line - work
RazorChartDirApp02.csproj - does Not work
RazorChartDirApp03.csproj - does Not work
RazorChartDirApp04.csproj - work WITHOUT CHARTS
RazorChartDirApp05.csproj - work
Reaction Path
WpfChartDirApp01.csproj - work
ChartDirector, Symbolline, Project, RazorPage, OK
D:\VC2508\Charts\WpfChartSln\WpfChartDir\WpfChartDir.sln
D:\VC2508\Charts\WpfChartSln\WpfChartDir\RazorChartDirApp05\RazorChartDirApp05.csproj
work well
Charts, TA, Moving, Candles, Bars, Generate, Mean, stdev, Porojects, Sln
D:\VC26\gs.trade\Tests\BackTest\BackTest.sln