Kendo Cascade DropDownList MVC - установить значение

У меня есть DropDownList, его данные загружаются динамически благодаря проекту DropDownList. В событии DataBound я хочу изменить, чтобы выбрать первое значение с помощью JavaScript. я использую SetDefValuesO Функция для этого. Работает, когда данные загружаются в функцию Список операций, автоматически выбирая первый элемент. Но когда я щелкаю, чтобы сохранить в строке редактирования строки Grid Row, запрос на обновление не содержит измененное значение. Это работает только тогда, когда я делаю это щелчком мыши.

Как это решить? Спасибо!

Сетка:

   columns.Bound(work => work.Operation).ClientTemplate("#=Operation.Code#").Width(100);
.Model(model =>
 {
    model.Id(p => p.Id);
    model.Field(p => p.Operation).DefaultValue(ViewData["defaultOperation"] as TT.Web.Models.ViewModel.OperationViewModel);
    model.Field(p => p.Spp).DefaultValue(ViewData["defaultSpp"] as TT.Web.Models.ViewModel.SppViewModel);
    model.Field(p => p.Project).DefaultValue(ViewData["defaultProject"] as TT.Web.Models.ViewModel.ProjectViewModel);
})

Шаблон редактора:

@(Html.Kendo().DropDownList()
    .Name("Operation")
    .OptionLabel("Vyberte výkon...")
    .CascadeFrom("Project")
    .DataValueField("Id")
    .Events(ev => ev.DataBound("SetDefValuesO") )
    .HtmlAttributes( new { requiredvalidationmessage = "required field", required = "required" })
    .DataTextField("Code")
                      .DataSource(source =>
                      {

                          source.Read(read =>
                          {
                              read.Action("GetCascadeOperations", "Home")
                                    .Data("filterOperations");
                          }).ServerFiltering(true); 
                      })
                      .Enable(false)
                      .AutoBind(false))


function SetDefValuesO(){

var OperationCount = $("#Operation").data("kendoDropDownList").dataSource._data.length;
console.log(OperationCount);

if(OperationCount == 1){
    $("#Operation").data("kendoDropDownList").value($("#Operation").data("kendoDropDownList").dataSource._data[0].Id);
    console.log($("#Operation").val());
}

РЕШЕНО:

    function SetDefValuesO(){
    var OperationCount = $("#Operation").data("kendoDropDownList").dataSource._data.length;
    if(OperationCount == 1){
       // $("#Operation").data("kendoDropDownList").select(1);
        $("#Operation").data("kendoDropDownList").value($("#Operation").data("kendoDropDownList").dataSource._data[0].Id);
        this.trigger("change"); // solution
    }
}

1 ответ

Решение

Во-первых, я бы предложил использовать метод данных dropDownList dataSource вместо внутренних методов, таких как метод _data.

Также при текущем подходе вы должны убедиться, что значение по умолчанию установлено только для новых записей, так как в противном случае при редактировании вы переопределите текущее значение. Возможное решение для этого состоит в том, чтобы обновить обработчик события "dataBound" следующим образом:

function SetDefValuesO(){
   var widget = this;
   var row = widget.wrapper.closest("tr");
   var grid = row.closest("[data-role=grid]").data("kendoGrid");
   var model = grid.dataItem(row);
   if (model.isNew()) {
     model.set("Operation", widget.dataSource.data()[0]);
   }
Другие вопросы по тегам