Подтвердить что ты не робот

Kendo: обработка ошибок в запросах данных Ajax

Использование Kendo UI в MVC4 У меня есть Сетка, которая делает Ajax вызов данных обратно в контроллер

    public ActionResult SearchUser_Read([DataSourceRequest]DataSourceRequest request)
    {
        var data = CreateAnExcaptionHere();
        return Json(data.ToDataSourceResult(request));
    }

Как использовать этот вызов для информирования страницы о том, что произошла ошибка?

4b9b3361

Ответ 1

Если вам нужно отобразить сообщение об ошибке с сервера, вы можете сделать это, возвратив объект DataSourceResult с установленным свойством Errors:

return this.Json(new DataSourceResult
            {
                Errors = "my custom error"
            });

И заберите его на клиенте, используя это (ссылка на строку .Events(events => events.Error("onError"))):

function onError(e, status) {
    if (e.status == "customerror") {
        alert(e.errors);
    }
    else {
        alert("Generic server error.");
    }
}

Ответ 2

Найденный, Kendo поддерживает его, просто добавив Событие в DataSource для вызова функции JS. Что это.

  .DataSource(dataSource => dataSource
      .Ajax()
      .Events(events => events.Error("onError"))
      .Read(read => read.Action("SearchUser_Read", "Search").Data("parentModel"))
  )

<script> 
    function onError(e, status) {
          alert("A server error has occurred!");
}
</script>

Ответ 3

Чтобы продлить ответ Дрю только немного: мы обычно хотим отменить изменение в сетке Кендо также при возникновении ошибки. В противном случае, если ошибка возникает, поскольку элемент удаляется из сетки, например, он все равно будет удаляться, даже если ошибка была сброшена, и было показано сообщение.

Эта функция также отменяет изменения в любых сетках, которые используют источник данных, который запустил ошибку:

function onError(e, status) {

    // Cancel changes on any grids on the page that are using this data source
    $('.k-grid').each(function (item) {
        var grid = $(this).data("kendoGrid");
        if (e.sender === grid.dataSource) {
            grid.cancelChanges();
        }
    });

    if (e.status == "customerror") {
        alert(e.errors);
    }
    else {
        alert("Generic server error.");
    }

}

Ответ 4

Попробуйте поднять исключение и проверить, запрашивает ли оно предупреждение или нет.

Для сетки Kendo есть событие ошибки, которое может быть полезно для вас.

http://docs.kendoui.com/documentation/getting-started/using-kendo-with/aspnet-mvc/migration/widgets/grid

Мы использовали сетки telerik mvc, которые автоматически отображают предупреждающие сообщения, если есть какая-либо ошибка при привязке.

http://www.telerik.com/community/forums/aspnet-mvc/grid/exception-handling.aspx

http://www.telerik.com/community/forums/aspnet-mvc/grid/how-to-do-error-handling-in-gridaction-methods.aspx

Ответ 5

Как насчет

throw new HttpResponseException(HttpStatusCode.BadRequest);