插入操作前的剑道树列表检查



我正在尝试使用模板弹出式编辑剑道MVC树列表。

在插入记录之前,我在服务器端做一些业务规则检查。我用"ModelState.ToDataSourceResult()"从控制器返回这些错误。
如果记录不符合要求,我想阻止插入操作。

但是我找不到处理这种情况的事件或属性。

Grid有onReqestEnd事件来捕获来自控制器的结果,但是TreeList没有。-

我找到了这个需求的解决方案,

下面是示例控制器代码:

    public ActionResult _Create([DataSourceRequest] DataSourceRequest request, Product product)
    {
        //Manually add an model error in order to simulate validation error
        ModelState.AddModelError("Name", "My server error");
        //TODO: implement create functionality
        return Json(ModelState.ToDataSourceResult());
    }

Telerik TreeListDataSource不公开onRequestEnd事件,但它可在文件上装订。就绪:

 $(document).ready(function () {
        ds = $('#myTreeList').data('kendoTreeList').dataSource;
        ds.bind("requestEnd", onTreeListRequestEnd);
    });

检查ajax请求端操作类型并调用错误处理函数:

function onTreeListRequestEnd(e) {
    if (e.type == "create" || e.type == "destroy") {
        onTreeListError(e.response);
    }
}

已定义的错误消息模板:

<script type="text/kendo-template" id="message">
<div class="k-widget k-tooltip k-tooltip-validation k-invalid-msg field-validation-error" style="margin: 0.5em; display: block; " data-for="#=field#" data-valmsg-for="#=field#" id="#=field#_validationMessage">
    <span class="k-icon k-warning"> </span>#=message#<div class="k-callout k-callout-n"></div>
</div>
</script>

显示错误信息:

<script type="text/javascript">
var validationMessageTmpl = kendo.template($("#message").html());
function onTreeListError(args) {
    if (args.Errors) {
        var treeList = $("#myTreeList").data("kendoTreeList");
        treeList.one("dataBinding", function (e) {
            e.preventDefault();   // cancel treeList rebind if error occurs
            for (var error in args.Errors) {
                showMessage(treeList.editor.editable.element, error, args.Errors[error].errors);
            }
        });
    }
}
function showMessage(container, name, errors) {
    //add the validation message to the form
    //if multiple messages exists at ModelState concat them
    errMessage = "";
    for (var i = 0; i < errors.length; i++){
        errMessage = errMessage.concat("r");
        errMessage = errMessage.concat(errors[i]);
    }
    container.find("[data-valmsg-for=" + name + "],[data-val-msg-for=" + name + "]")
                    .replaceWith(validationMessageTmpl({ field: name, message: errMessage }))
}
</script>

我得到了帮助从Telerik MVC网格问题:http://www.telerik.com/forums/kendo-grid-edit-mode-popup--error-handling

和这个示例项目:处理弹出式编辑期间的服务器端验证错误

感谢T10分享您的解决方案,
有了你的解决方案,我可以在创建剑道树列表MVC时使用它。

@(Html.Kendo().TreeList<YourModel>()
    .Name("TreeList")
    .DataSource(d=> d.Events(e => e.RequestEnd("onTreeListRequestEnd"))
)

希望对大家有所帮助

相关内容

  • 没有找到相关文章

最新更新