Kendo Cascade DropDownList MVC - 设定值

时间:2015-10-16 11:30:50

标签: kendo-ui kendo-grid kendo-asp.net-mvc kendo-dropdown

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

1 个答案:

答案 0 :(得分: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]);
   }