我使用下拉列表作为网格中列的EditorTemplate:
@model Guid?
@(Html.Kendo().DropDownListFor(m => m)
.DataValueField("Id")
.DataTextField("Name")
.DataSource(dataSource =>
{
dataSource.Read(read => read.Action(MVC.Controller.ActionNames.ActionName_Read, MVC.Controller.Name))
.ServerFiltering(true);
})
.ValuePrimitive(true)
)
我的控制器:
public virtual ActionResult ActionName_Read()
{
var applicationID = AppSettings.Id.Guid;
var return = _db.table.Where(w => w.ID == appID).Select(s => new { s.Name, Id = s.Guid});
return Json(return, JsonRequestBehavior.AllowGet);
}
我的专栏:
columns.Bound(c => c.Name).Filterable(f => f.UI("$.proxy(filterFunction, {field: Name})").Operators(o => o.ForString(e => e.Clear().IsEqualTo("Is equal to").IsNotEqualTo("Is not equal to")))).EditorTemplateName("EditorTemplateName");
我添加了.ValuePrimitive(true)并且返回了ID,但是如果我删除了它,它将返回[object object]。
我从操作中返回了名称和ID,但只填充了名称字段,并由ID填充。
答案 0 :(得分:0)
您可以使用.ValueTemplate()属性。
这是一个例子https://demos.telerik.com/aspnet-mvc/dropdownlist/template
.ValueTemplate("#:yourObject.Name#")
答案 1 :(得分:0)
我在EditorTemplate中循环进入DropDownList的change事件并执行以下操作:
function selectRow(name, event) {
var rowUid = $("#Name").closest("tr").attr("data-uid");
var rowItem = $("#" + name).data("kendoGrid").dataSource.getByUid(rowUid);
var currentName = event.sender._focused[0].textContent;
var currentDataSource = event.sender.dataSource._data;
for (var i = 0; i < currentDataSource.length; i++) {
if (currentDataSource[i].Name=== currentName) {
rowItem.set("Id", currentDataSource[i].Id);
rowItem.set("Name", currentDataSource[i].Name);
}
}
}