33

在MVC4中使用Kendo UI我有一个网格,它使Ajax将数据调用回控制器:

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

如何使用此调用通知页面出现错误?

4

6 回答 6

49

如果您需要显示来自服务器的错误消息,则可以通过返回仅设置了 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.");
    }
}
于 2013-08-29T17:23:49.073 回答
28

找到它,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>
于 2012-11-30T23:16:27.250 回答
13

稍微扩展一下 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.");
    }

}
于 2014-11-03T14:29:33.717 回答
2

尝试引发异常并检查它是否提示警报消息。

对于剑道网格,有可能对您有帮助的错误事件。

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

于 2012-11-30T22:21:12.073 回答
0

对于读取数据,您不应向 ModelState 添加豁免并返回它,就像您为创建更新和删除请求所做的那样,而是将错误添加到数据源对象并使用相同的 jquery onerror 事件处理它。

 public virtual JsonResult Read_Tasks([DataSourceRequest] DataSourceRequest request) 
    {
        try
        {
            return Json(ListAll().ToDataSourceResult(request));
        }
        catch (Exception ex)
        {
            string exmptionText = ex.Message;

            ModelState.AddModelError(string.Empty, exmptionText); //This will not work 
            Logger.Error(exmptionText + ex.StackTrace);

            return this.Json(new DataSourceResult
            {
                Errors = new
                {
                    a = new { errors = new[] { exmptionText } }
                }
            });
        }
    }

function error_handler(e)
    {
        if (e.errors)
        {
        var message = "Errors:\n";
        $.each(e.errors, function (key, value) {
            if ('errors' in value) {
                $.each(value.errors, function () {
                    message += this + "\n";
                });
            }

 alert(message );
        });

     
    }
于 2021-12-16T09:58:00.683 回答
-3

怎么样

throw new HttpResponseException(HttpStatusCode.BadRequest);
于 2015-12-12T22:11:02.857 回答