Nano Hash - криптовалюты, майнинг, программирование

HighCharts не отображается в частичном представлении

мой контроллер

    public ActionResult Index()
    {

        if (Request.IsAjaxRequest())
        {
            List<double> nyValues = new List<double> { 83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3 };
            List<ColumnSeriesData> nyData = new List<ColumnSeriesData>();
            nyValues.ForEach(p => nyData.Add(new ColumnSeriesData { Y = p }));
            ViewData["tokyoData"] = nyData;

            return PartialView("~/Views/Home/_Graph.cshtml");
        }
        else

        {
            List<double> tokyoValues = new List<double> { 49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4 };
            List<ColumnSeriesData> tokyoData = new List<ColumnSeriesData>();
            tokyoValues.ForEach(p => tokyoData.Add(new ColumnSeriesData { Y = p }));
            ViewData["tokyoData"] = tokyoData;

            return View();
        }
    }

и в поле зрения

<div class="graphDiv" id="MainGraph">
@{ Html.RenderPartial("_Graph");}
</div>

и вызов ajax

 @Ajax.ActionLink("Team", "Index", "Home", null, new AjaxOptions { HttpMethod = "GET", LoadingElementId = "divLoading", UpdateTargetId = "body", InsertionMode = InsertionMode.Replace, OnSuccess = "" }, new { })

Частичное представление не отображается в div. Это просто пустая страница... Любая помощь... Заранее спасибо.


  • Вызов AJAX успешен? Если нет, то какую ошибку вы получаете? Попробуйте выполнить отладку: stackoverflow.com/questions /1820927/ 19.05.2018
  • Спасибо за ваши комментарии. Вызов Ajax выполнен успешно. Если я поставлю div до и после графика, даже это появится на странице, но график не появится. ‹div id=стиль диаграммы=высота:;минимальная ширина:;очистить:оба;маржа: 0 авто; data-highcharts-chart=0› Это погружение исчезло после звонка Ajax 19.05.2018
  • Если добавленный <div></div> отображается в представлении, но график отсутствует, это означает, что часть Ajax/View Rendering в порядке, возможно, возникла проблема с инициализацией самого графика. Я предлагаю вам подробно изучить это руководство... c-sharpcorner.com/article/dotnet-highcharts-with-asp-net-mvc 19.05.2018
  • Спасибо, Микаал, за ваше предложение. Я обнаружил ошибку, заключающуюся в том, что я снова инициализирую высокие диаграммы как в основном представлении, так и в частичном представлении, и это дает ошибку, что высокие диаграммы уже были инициализированы. Не могли бы вы подсказать, как инициализировать их только один раз @using Highsoft.Web.Mvc.Charts { @(Html.Highsoft().Highcharts(new Highcharts {}),container1) 24.05.2018
  • Конечно... можете ли вы опубликовать код для частичного представления @{Html.RenderPartial(_Graph);}? 25.05.2018
  • Пожалуйста, ознакомьтесь с ответом ниже. 25.05.2018

Ответы:


1

проблема в нашем проекте была в том, что highcharts вызывает два события:

  • DOMContentLoaded
  • изменение состояния готовности

https://developer.mozilla.org/en-US/docs/Web/API/Document/readystatechange_event

Highcharts генерирует метод, который не запускается этим обработчиком событий. Мы должны запустить функцию «CreateChart», когда Ajax преуспеет.

if (document.addEventListener) 
{
  document.addEventListener("DOMContentLoaded", function() {
    createChartTargetChart(); //CreateChartFunction !!
  });
}
else if (document.attachEvent) 
{
  document.attachEvent("onreadystatechange", function() {
      if (document.readyState === "complete")
      {
        document.detachEvent("onreadystatechange", arguments.callee);
        createChartTargetChart(); //CreateChartFunction !!
      }
   });
}

Highsoft автоматически генерирует имя функции, в С# вы можете кодировать:

string divId = "xxx"; // = the containers target Id 
var functionName = $"createChart{divId}()";
15.05.2019

2

Я думаю, вы пытаетесь отобразить диаграмму в частичном представлении и отобразить это частичное представление внутри основного представления. Чтобы правильно отображать "PartialView" внутри "MainView" с помощью запроса AJAX, попробуйте следующее:

Основной вид:

@{ ViewBag.Title = "MainView"; }

<script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>

<h2>MainView</h2>
<div class="graphDiv" id="MainGraph">
  @Ajax.ActionLink("Team", "GetChart", "Home", new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "TargetForChart", InsertionMode = InsertionMode.Replace, OnSuccess = "" })
  <h2>The chart appears here:</h2>
  <div id="TargetForChart">

  </div>
</div>

Частичный вид:

<!-- Your chart html and js goes here -->

Контроллер:

public class HomeController : Controller
{
    public ActionResult MainView()
    {
        return View();
    }

    public PartialViewResult GetChart()
    {
        List<double> nyValues = new List<double> { 83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3 };
        List<ColumnSeriesData> nyData = new List<ColumnSeriesData>();
        nyValues.ForEach(p => nyData.Add(new ColumnSeriesData { Y = p }));
        ViewData["tokyoData"] = nyData;
        return PartialView("_Graph");
    }
}

И пока ваше частичное представление содержит правильную логику, не будет никаких причин для того, чтобы оно не отображалось. Если вы продублировали логику инициализации для диаграммы как в MainView, так и в PartialView, я бы посоветовал вам удалить ее из MainView и оставить только в PartialView, где она фактически будет отображаться. Следите за консолью, чтобы обнаруживать и устранять любые ошибки js.

25.05.2018
  • Привет @Mikaal Анвар, спасибо за ваш ответ. Я сделал точно так же, как вы предложили, но все равно не повезло. ! У меня есть ‹div id=TargetForChart›, и внутри этого, как вы предложили, я использую ссылки для высоких диаграмм, а затем я получаю ‹div id=chart›, и этот div пуст, затем я получаю ‹script type=javascript› и внутри скрипта я получить разметку для диаграммы, но диаграмма отображается. В частичном представлении нет ничего плохого, так как я скопировал его с высоких графиков. 04.06.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..