Kendo UI - 如何使用Kendo Grid在WEB API,非MVC上实现错误处理

时间:2012-11-15 09:22:10

标签: kendo-ui

我的场景是我创建了一个返回Active Directory对象的Web API。

我有这个WEB API函数创建Active Directory用户并创建一个返回包含First Name , Last Name, Email, UserName, Etc.的Active Directory对象的用户。如果出现错误怎么办?我将如何处理?

我正在使用Kendo Grid InLine Edit http://demos.kendoui.com/web/grid/editing-inline.html
我想将错误消息显示为弹出窗口

我该怎么办?

选项

  1. 尝试捕获错误并将Active Directory对象放入 例外???

    • 我如何捕获这个是Kendo UI?
  2. 抛出响应并收到错误消息并在Kendo Grid中显示

    // HttpResponseMessage msg = new HttpResponseMessage(HttpStatusCode.OK)                             // {                             // Content = new StringContent(string.Format(“No User with ID = {0}。{1}”,businessObject.UserName,ex.InnerException.ToString())),                             // ReasonPhrase =“数据库中找不到CustomerID!”                             //};                             //抛出新的HttpResponseException(msg);

  3. OR

      //var message = string.Format("Error Message: {0}", taskCreateADUser.ADExceptionDescription);
                    //throw new HttpResponseException(
                    //    Request.CreateErrorResponse(HttpStatusCode.OK, message)); 
    

    谢谢, MarcLevin

2 个答案:

答案 0 :(得分:3)

每当KendoUI通过Ajax绑定时,它依赖于在json响应中发送的序列化版本的ModelState。基本上,如果ModelState无效,返回到窗口小部件的json响应(在这种情况下为网格)将包含如下内容:

{
  "Errors":{
     "PropA":{
        "errors":[
           "Error1",
    "Error2"
        ]
     },
     "PropB":{
        "errors":[
           "FUBAR"
        ]
     }
  }
}

基本上,如果您希望网格对其进行响应,您的WebAPI将需要返回类似的数据结构。

答案 1 :(得分:0)

这与您的选项2有关。您需要将以下内容正确应用于您的特定方案。这只是一个非常简单的响应解析示例,如果检测到错误则显示警报。此示例需要一个包含Items数组的JSON对象。一旦你掌握了基本想法,你肯定可以应用更高级的处理。

    $("#grid").kendoGrid({
                dataSource: {
                    schema: {
                        data: function(data) {
                            if (data.Items[0].substring(0,37) == "allmyerrormessagesstartwiththisphrase"){
                            alert(data.Items[0];
                            } else {
                                return data.Items;
                            }
                        }
                    },
                    transport: {
                        read: "http://myurl.com/something/"
                    }
                }
            }
        );