2016-11-07 3 views
0

Я пытаюсь использовать твист Kendo MVC с всплывающим редактированием с использованием шаблона.Kendo treelist проверяет перед вставкой операции

Перед тем, как вставить запись, я делаю проверку бизнес-правил на стороне сервера. Я возвращаю эти ошибки из контроллера с помощью «ModelState.ToDataSourceResult()».
Если запись не соответствует требованиям, я хочу предотвратить работу вставки.

Но я не смог найти событие или свойство, которое обрабатывает эту ситуацию.

Сетка имеет onReqestEnd событие, чтобы поймать результаты от контроллера, но делает TreeList -not.-

ответ

0

Я нашел решение для этого требования,

Ниже приведен пример кода контроллера:

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); 

    }); 

проверить тип операции для АЯКС конца запроса и вызова функции обработчика ошибок:

function onTreeListRequestEnd(e) { 

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

} 

Defined шаблон сообщения об ошибке:

<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

Надеется, что это помогает кто-то ..

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

  • Нет связанных вопросов^_^