Почему не происходит событие ошибки в моем источнике данных при возникновении ошибки? - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь заставить мой DonutChart показывать ошибку, когда есть ошибка в ModelState. Однако событие в DataSource.Events.Error не запускается. Я что-то здесь упускаю?

У меня есть cshtml-файл с диаграммой в нем:

@{ string shortDept = "OW"; }

@model IEnumerable<DonutValue>
@(Html.Kendo().Chart<DonutValue>()
    .Name("Donut")
    .DataSource(dataSource => dataSource
        .Read(read => read
            .Action("Get_KPI", "Data", new { dept = shortDept })
        )
        .Events(events => events
            .Error("checkError")
        )
    )
    .Series(series => { series
        .Donut(
            model => model.Value,
            model => model.Description,
            model => model.Color,
            null
        )
        .HoleSize(50)
        .Size(16)
        .StartAngle(90);
    })
    .Events(events => events
        .SeriesHover("onDonutSeriesHover")
        .Render("onDonutRender")
    )
)

Модель выглядит следующим образом:

public class DonutValue
{
    public string Department { get; set; }
    public decimal Value { get; set; }
    public string Color { get; set; }
    public string Description { get; set; }
}

Контроллер работает и возвращает данные с ошибкой в ​​ModelState:

public class DataController : Controller
{
    [HttpPost]
    public JsonResult Get_KPI([DataSourceRequest] DataSourceRequest request, string dept)
    {
        ModelState.AddModelError("Error", "Testfoutmelding!");
        KPIServicesClient client = new KPIServicesClient();
        List<DonutChartValue> values = client.GetDonutChartValues() ?? new List<DonutChartValue>();
        var data = values.FirstOrDefault(x => x.Department == dept);
        var data2 = new DonutValue[] {
            new DonutValue() {Value = data.CurrentSLA, Color = data.SLAColor, Description = $"Huidige SLA: {data.SLAShowValue}", Department = dept},
            new DonutValue() {Value = data.PotentialPlusSLA, Color = data.PotentialSLAColor, Description = $"Potentiële SLA: {data.PotentialSLAShowValue}", Department = dept },
            new DonutValue() {Value = data.LostSLA, Color = "#EFEFEF", Description = "", Department = dept}
        };

        return Json(data2.ToDataSourceResult(request, ModelState), JsonRequestBehavior.AllowGet);
    }
}

Функция JavaScript показывает только предупреждение для целей тестирования:

<script>
  function checkError(e) {
    alert("Error!");
  }
</script>

Я убедился, что ошибка действительно возвращается в результате JSON: https://imgur.com/AFacf99.

Код JavaScript для обработки ошибки находится в том же файле, что и код для обработки Render и SeriesHover, и они запускаются, поэтому сценарий может быть доступен.

Я что-то здесь упускаю? Пожалуйста, помогите!

Заранее спасибо!

1 Ответ

0 голосов
/ 22 мая 2019

Поле из объекта ответа, содержащее ошибки, должно быть явно определено в схеме определения источника данных:

        .DataSource(dataSource => dataSource
            .Custom()
            .Type("aspnetmvc-ajax")
            ...
            .Transport(transport => transport
                 .Read(read => read.Action("Get_KPI", "Data", new { dept = shortDept })
            )
            .Events(events => events
                .Error("checkError")
            )
            .Schema(schema => schema
                .Data("Data")
                .Total("Total")
                .Errors("Errors")
                ...
            )
        )

В противном случае поле по умолчанию называется «ошибки» (строчная буква «е»), но поле ответа на самом деле «Ошибки» (прописная буква «Е»).

Более подробную информацию о настройке источника данных можно найти в официальных документах .

...