web-dev-qa-db-fra.com

Kendo: Gestion des erreurs dans les demandes de données Ajax

En utilisant Kendo UI dans MVC4 J'ai un Grid qui fait Ajax appelle les données à nouveau dans le contrôleur:

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

Comment utiliser cet appel pour informer la page d'une erreur?

31
BahaiResearch.com

Si vous devez afficher un message d'erreur du serveur, vous pouvez le faire en renvoyant un objet DataSourceResult avec uniquement son jeu de propriétés Errors:

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

Et récupérez-le sur le client en utilisant ceci (référencé par la ligne .Events(events => events.Error("onError"))):

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

Trouvé, Kendo le prend en charge en ajoutant simplement un événement au DataSource la fonction JS à appeler. C'est ça.

  .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>
25
BahaiResearch.com

Pour étendre un peu la réponse de Drew: nous voulons généralement annuler la modification dans la grille de Kendo également lorsqu'une erreur se produit. Sinon, si une erreur est renvoyée lorsqu'un élément est supprimé de la grille, par exemple, il semblera toujours être supprimé même si l'erreur a été levée et qu'un message a été affiché.

Cette fonction annule également les modifications dans les grilles qui utilisent la source de données qui ont généré une erreur:

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.");
    }

}
11
Matt

Essayez de lever l'exception et vérifiez si elle invite ou non un message d'alerte.

Pour la grille Kendo, il y a un événement d'erreur qui pourrait vous être utile.

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

Nous avons utilisé les grilles telerik mvc qui affichent automatiquement les messages d'alerte en cas d'erreur lors de la liaison.

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

2
Sunny