2015-10-16 4 views
1

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

Как это решить? Благодаря!

Сетка:

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

Привет, помог ли мой ответ решить вашу проблему? Если да, не могли бы вы пометить мой ответ в качестве ответа? Таким образом, люди, которые могут найти вопрос с помощью Google, могут получить больше уверенности в правильности ответа. Спасибо заранее. –

ответ

0

Сначала я хотел бы предложить использовать DROPDOWNLIST DATASOURCE data method вместо внутренних методов, таких как «_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]); 
    } 
Смежные вопросы