如何防止kendo调度程序关闭窗口

时间:2016-04-19 10:12:55

标签: asp.net-mvc error-handling preventdefault kendo-scheduler

我在我的视图中开发了一个ASP.NET MVC应用程序,我有一个调度程序

    @(Html.Kendo().Scheduler<MeetingModel>()
    .Name("scheduler")
    .Date(new DateTime(2016, 4, 01))
    .StartTime(new DateTime(2016, 4, 01, 00, 00, 00))
    .Height(600)

    .Views(views => {
        views.DayView(d => d.Footer(false));
        views.WeekView(weekView => weekView.Footer(false).Selected(true));
        views.MonthView();
        views.AgendaView();

    })
    .Editable(editable => {
        editable.TemplateName("EditMeeting").Destroy(false).Update(false).Resize(false);
    })
.AllDaySlot(false).Events(e=>e.Edit("scheduleEdit").Move("scheduler_move").MoveEnd("scheduler_moveEnd"))

    .DataSource(d => d
        .Model(m => {
            m.Id(f => f.IDMeeting);
            m.Field(f => f.Title).DefaultValue("No title");
        })
        .Events(e => e.Error("error_handler").RequestEnd("onRequestEnd"))
        .Read("Meeting_Read", "Meeting")
        .Create("Meeting_Create", "Meeting")
        .Destroy("Meeting_Destroy", "Meeting")
        .Update("Meeting_Update", "Meeting")
    )
)

当我验证添加会议的操作时,我有一个自定义错误,我将它们添加到ModelState.AddModelError,editMeeting的窗口关闭。

 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";
                });
            }
        });
        var scheduler = $("#scheduler").data("kendoScheduler");
        scheduler.one("dataBinding", function (e) {
            //prevent saving if server error is thrown
            e.preventDefault();
        })
        alertify.log(message, "error", 4000);
    }
}

如何防止窗口关闭,窗口出错时窗口不能关闭

1 个答案:

答案 0 :(得分:0)

基本上,您提供的“错误”事件处理程序应该起到防止编辑窗口关闭的唯一方法,就是防止下一个“dataBinding”事件。当前行为的可能原因可能是未抛出错误事件,因为您未在响应的“错误”字段内返回模型状态错误。以下是使用“ToDataSourceResult”扩展方法时将ModelState错误返回给客户端的正确方法:

return Json(new[] { meeting }.ToDataSourceResult(request, ModelState));