Kendo Cascade DropDownList MVC - 设置值
Kendo Cascade DropDownList MVC - set value
我有 DropDownList,由于 Project DropDownList,他的数据是动态加载的。在 DataBound 事件中,我想通过 JavaScript 更改为 select 第一个值。我为此使用 SetDefValuesO
函数。它的工作原理是,当数据自动加载到操作列表功能中时 select 第一项。但是当我在内联编辑网格行中单击保存时,更新请求不包含更改的值。只有当我通过鼠标点击时它才有效。
如何解决这个问题?谢谢!
网格:
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
}
}
首先,我建议使用 dropDownList 数据源 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]);
}
我有 DropDownList,由于 Project DropDownList,他的数据是动态加载的。在 DataBound 事件中,我想通过 JavaScript 更改为 select 第一个值。我为此使用 SetDefValuesO
函数。它的工作原理是,当数据自动加载到操作列表功能中时 select 第一项。但是当我在内联编辑网格行中单击保存时,更新请求不包含更改的值。只有当我通过鼠标点击时它才有效。
如何解决这个问题?谢谢!
网格:
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
}
}
首先,我建议使用 dropDownList 数据源 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]);
}