2013-12-16 2 views
0

В нижней части сетки я реализовал метод Destroy для удаления записей, но проблема в том, что при удалении на стороне сервера произошла ошибка, сетка kendo все еще удаляет запись из сетки. когда я обновляю запись страницы, появляется снова, как ожидалось. как я могу предотвратить сетку кендо от удаления записи, если произошла ошибка на стороне сервера и показать сообщение об ошибке пользователю?Kendo Grid Destroy Command Не обновляющая сетка

@(Html.Kendo().Grid((IEnumerable<RealEstateApp.Models.propertyOwenerModel>)Model) 
     .Name("grid") 
     .Columns(columns => 
     { 
      columns.Bound(o => o.id).Visible(false); 

      columns.Bound(o => o.name).Width("150px"); 
      columns.Bound(o => o.email).Width("100px"); 
      columns.Bound(o => o.address).Width("200px"); 
      columns.Bound(o => o.telephone).Width("100px"); 
      columns.Bound(o => o.mobile).Width("100px"); 

      columns.Template(o => Html.ActionLink("Edit", "Edit", new { o.id })).ClientTemplate("<a class='k-button k-button-icontext' href=\"" + Url.Action("Edit", "propertyOwner") + "/#= id#\"><span class='k-icon k-edit'></span>Edit</a>").Width(80).Title("Edit"); 
      if (Roles.IsUserInRole(User.Identity.Name, "admin")) 
      { 
       columns.Command(commands => 
       { 

         commands.Destroy(); // The "destroy" command removes data items 


       }).Title("Delete").Width(90); 
      } 
      //columns.Template(o => Html.ActionLink("Delete", "Delete", new { o.id })).ClientTemplate("<a class='blue' href=\"" + Url.Action("Details", "propertyOwner") + "/#= id#\"><i class='icon-zoom-in bigger-130'>Delete</i></a>").Width(65).Title("Details"); 
     }) 
     .ToolBar(toolbar => 
     { 

      toolbar.Template(@<text> 
    <a class="k-button" href="/propertyOwner/Create"><span class="k-icon k-si-plus"></span></a> 
    </text>); 


     }) 
     .Pageable() 
     .Sortable() 
     .Scrollable() 
     .Filterable() 
     .Groupable() 
     .HtmlAttributes(new { style = "height:900px;" }) 

     .DataSource(dataSource => dataSource 
      .Ajax() 
      .PageSize(20) 
      .Read(read => read.Action("AjaxGrid", "propertyOwner")) 
      .Destroy(destroy => destroy.Action("Destroy", "propertyOwner")) 

       .Model(model => 
       { 
        model.Id(m=>m.id); // Specify the property which is the unique identifier of the model 
        model.Field(m => m.id).Editable(false); // Make the ProductID property not editable 
       }) 
       ) 


    ) 

ответ

1

Вы должны определить errors функцию или поле в вас Schema определение, это поле, на котором сервер отправляет уведомление UI.

Затем в DataSource определите обработчик событий error, который отображает предупреждающее сообщение (или все, что вы хотите сделать).

Пример определения DataSource с использованием errors определения поля и error обработчика события:

var dataSource = new kendo.data.DataSource({ 
    transport: { 
     read: { 
      url: "http://demos.kendoui.com/service/twitter/search", 
      dataType: "jsonp", 
      data: { q: "#" } 
     } 
    }, 
    schema: { 
     errors: "error" // twitter's response is { "error": "Invalid query" } 
    }, 
    error: function(e) { 
     console.log(e.errors); // displays "Invalid query" 
    } 
}); 

EDIT: Если вам нужно сделать какую-то сложную проверку, а не просто сказать, какое поле содержит ошибку, вы можете определить a errors функция у вас schema, которая возвращает true за ошибки и false для ok !.

Пример:

var dataSource = new kendo.data.DataSource({ 
    transport: { 
     read: { 
      url: "http://demos.kendoui.com/service/twitter/search", 
      dataType: "jsonp", 
      data: { q: "#" } 
     } 
    }, 
    schema: { 
     errors: function (d) { 
      // twitter's response is { "error": "Invalid query" } 
      return (d.error && d.error !== "ok") ? true : false; 
     } 
    }, 
    error: function(e) { 
     ... 
    } 
}); 
+0

теперь я могу отобразить сообщение об ошибке, но все-таки запись удаляется из сетки, и это не освежающий – chamara

+0

Для не получить его удалить, вы должны определить 'errors' функции, которые возвращают' true ', когда нет' error', ваша функция должна возвращать 'false'. См. Мой вопрос ** EDIT **. – OnaBai

Смежные вопросы