我需要一些帮助。我想得到服务器端错误并显示到kendo网格。如何使用客户端JavaScript。我会在kendo网格中找到错误。如何找到它..如果我正在调用服务,那么服务器中的某些错误就像(Bad request或500)那样。如何获取在剑道网格中出现此错误。可以使用javascript Kendo网格在客户端获取错误。
答案 0 :(得分:0)
我假设您使用Ajax将数据加载到Kendo网格中。需要在网格中定义错误事件处理。
@ DontVoteMeDown的答案适用于JavaScript。这可能是你问题的正确答案。
Razor实现更直接,可以实现如下所示。
@(Html.Kendo().Grid<KendoGridAjaxEditing.Models.ProductViewModel>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(product => product.ProductID).Width(100);
columns.Bound(product => product.ProductName);
columns.Bound(product => product.UnitsInStock).Width(250);
columns.Command(commands =>
{
commands.Edit();
commands.Destroy();
}).Title("Commands").Width(200);
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.InLine))
.DataSource(dataSource =>
dataSource.Ajax()
.Events(events => events.Error("grid_error")) // Handle the "error" event
.Model(model =>
{
model.Id(product => product.ProductID);
model.Field(product => product.ProductID).Editable(false);
})
.Create(create => create.Action("Products_Create", "Home"))
.Read(read => read.Action("Products_Read", "Home"))
.Update(update => update.Action("Products_Update", "Home"))
.Destroy(destroy => destroy.Action("Products_Destroy", "Home"))
)
.Pageable()
)
<script>
function grid_error(e) {
if (e.errors) {
var message = "There are some errors:\n";
// Create a message containing all errors.
$.each(e.errors, function (key, value) {
if ('errors' in value) {
$.each(value.errors, function () {
message += this + "\n";
});
}
});
// Display the message
alert(message);
// Cancel the changes
var grid = $("#grid").data("kendoGrid");
grid.cancelChanges();
}
}
</script>
http://docs.telerik.com/kendo-ui/aspnet-mvc/helpers/grid/ajax-editing
答案 1 :(得分:0)
http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#events-error
只需监听错误事件并调整服务器响应,以便在抛出错误时返回Json对象。
在ASP.NET MVC项目中,我在我的基本控制器中使用了一个如下所示的方法:
protected JsonResult JsonError(ModelStateDictionary modelState)
{
if (modelState == null) new ArgumentNullException();
if (modelState.IsValid) new ArgumentException();
Response.Clear();
Response.ContentEncoding = Encoding.UTF8;
Response.HeaderEncoding = Encoding.UTF8;
Response.TrySkipIisCustomErrors = true;
Response.StatusCode = 400;
return Json(String.Join("\n", modelState.SelectMany(state => state.Value.Errors, (state, error) => error.ErrorMessage)));
}
它需要一些适应你的odata服务,但这应该让你开始。使用400 StatusCode返回错误消息的重要部分(其他代码可能有效)。
答案 2 :(得分:0)
为可能近期陷入困境的任何人写出此答案。此问题基本上包括三个部分:-
如果代码在服务器上中断,返回的操作方法是什么。这是我为Kendo ui返回的内容,以确认服务器上存在错误:-
return Json(new { error = String.Format("Error message.") });
请注意,如果未从服务器以正确的格式返回JSON,则kendo将不会识别出代码已损坏。
您如何处理前端错误。如果您使用的是new kendo.data.DataSource
,则可以使用error
属性,并将其分配给以下函数:-
var cloudStore = new kendo.data.DataSource({
//other properties here
//error property below
error: function (e) {
//since an error has occured, we are below removing the object we added to the grid
$("#cloudGrid").each(function (item) {
var grid = $(this).data("kendoGrid");
if (e.sender === grid.dataSource) {
grid.cancelChanges();
}
});
//opening a popup to show the error message
alert(e.errors);
}
)};
即使在后端实际更新对象之前,Kendo也会在前端更新网格,因此,如果服务器上发生错误,我们将相应地更新网格。为此,请注意上面的代码并查看each
循环。那是网格被还原到其上一阶段的地方。