我正在嘗試使用模板彈出編輯Kendo MVC treelist。Kendo插入操作之前的treelist檢查
在插入記錄之前,我正在服務器端進行一些業務規則檢查。 我用「ModelState.ToDataSourceResult()」從控制器返回這些錯誤。
如果記錄不符合要求,我想防止插入操作。
但我無法找到處理這種情況的事件或財產。
電網已onReqestEnd事件捕捉來自控制器的結果,但確實的TreeList -not.-
我正在嘗試使用模板彈出編輯Kendo MVC treelist。Kendo插入操作之前的treelist檢查
在插入記錄之前,我正在服務器端進行一些業務規則檢查。 我用「ModelState.ToDataSourceResult()」從控制器返回這些錯誤。
如果記錄不符合要求,我想防止插入操作。
但我無法找到處理這種情況的事件或財產。
電網已onReqestEnd事件捕捉來自控制器的結果,但確實的TreeList -not.-
我發現這一要求的解決方案,
下面是示例控制器的代碼:
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處綁定 :
$(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 Grid問題: http://www.telerik.com/forums/kendo-grid-edit-mode-popup---error-handling
與此示例項目: Handling server-side validation errors during pop-up editing
希望這可以幫助別人..