【问题标题】:Kendo Cascade DropDownList MVC - set valueKendo Cascade DropDownList MVC - 设置值
【发布时间】:2015-10-16 11:30:49
【问题描述】:

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

【问题讨论】:

  • 您好,我的回答对您的问题有帮助吗?如果是,您能否将我的回复标记为答案?这样一来,使用谷歌找到问题的人就可以更加确信答案是正确的。提前致谢。

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


【解决方案1】:

首先我建议使用 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]);
   }

【讨论】:

    猜你喜欢
    • 2013-12-19
    • 2013-12-29
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多