web-dev-qa-db-ja.com

剣道:Ajaxデータリクエストのエラー処理

Kendo UIをMVC4に使用すると、Gridがあり、これがAjaxコントローラーへのデータの呼び出しを行います。

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

この呼び出しを使用して、エラーがあったことをページに通知するにはどうすればよいですか?

31

サーバーからエラーメッセージを表示する必要がある場合は、Errorsプロパティのみを設定してDataSourceResultオブジェクトを返すことにより、エラーメッセージを表示できます。

_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.");
    }
}
_
44
Drew Delano

それを見つけたKendoは、JS関数を呼び出すDataSourceにEventを追加するだけでサポートします。それでおしまい。

  .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

Drewの答えを少しだけ拡張するために、通常、エラーが発生したときにもKendo Gridの変更をロールバックします。そうでない場合、たとえば、グリッドからアイテムを削除するときにエラーがスローされると、エラーがスローされてメッセージが表示された場合でも、アイテムは削除されたように見えます。

この関数は、エラーをスローしたデータソースを使用しているグリッドの変更もキャンセルします。

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

例外を発生させて、警告メッセージが表示されているかどうかを確認してください。

Kendoグリッドの場合、エラーイベントがあり、これが役立つ場合があります。

http://docs.kendoui.c​​om/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

2
Sunny