2015-10-16 131 views
1

我有DropDownList,他的数据是由于Project DropDownList动态加载的。在DataBound事件中,我想要更改以通过JavaScript选择第一个值。我使用SetDefValuesO函数。它起作用,当数据被加载到操作列表功能中时自动选择第一项。但是,当我单击保存在内联编辑网格行时,更新请求不包含更改的值。它只有当我点击鼠标时才有效。Kendo级联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

首先,我会建议使用下拉列表数据源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]); 
    }