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

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

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

Сетка:

   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
    }
}

person Martin Haščák    schedule 16.10.2015    source источник
comment
Привет, мой ответ помог тебе решить твою проблему? Если да, не могли бы вы отметить мой ответ как ответ? Таким образом, люди, которые находят вопрос с помощью Google, могут быть более уверены в правильности ответа. Заранее спасибо.   -  person Vladimir Iliev    schedule 23.10.2015


Ответы (1)


Сначала я бы предложил использовать метод dataSource 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]);
   }
person Vladimir Iliev    schedule 17.10.2015