Kendo Cascade DropDownList MVC - установить значение
У меня есть DropDownList, его данные загружаются динамически благодаря проекту DropDownList. В событии DataBound я хочу изменить, чтобы выбрать первое значение с помощью JavaScript. я использую SetDefValuesO
Функция для этого. Работает, когда данные загружаются в функцию Список операций, автоматически выбирая первый элемент. Но когда я щелкаю, чтобы сохранить в строке редактирования строки Grid Row, запрос на обновление не содержит измененное значение. Это работает только тогда, когда я делаю это щелчком мыши.
Как это решить? Спасибо!
Сетка:
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 ответ
Во-первых, я бы предложил использовать метод данных dropDownList dataSource вместо внутренних методов, таких как метод _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]);
}