Kendo DropDown返回Value而不是Text

时间:2018-05-14 14:17:30

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

我使用下拉列表作为网格中列的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填充。

2 个答案:

答案 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);
    }
}

}