如何设置异步数据源更改事件的值?

How can I set a value from an asynch DataSource Change Event?

我有这段代码:

<script type="text/javascript">
    function onCompanyChange(e) {
        // here I need to manage ${Code}
    }
</script>

@(Html.Kendo().DropDownListFor(model => model.Company)
    .Name("Company")
    .DataTextField("Name")
    .DataValueField("Name")
    .DataSource(source =>
    {
        source.Read(read =>
        {
            read.Action("GetCompanies", "Companies");
        })
        .ServerFiltering(false);
    })
    .Events(e => e.Change("onCompanyChange"))
    .Template("<table><tr><td width='300px'>${Name}</td><td width='100px'>${Code}</td><td width='200px'>${State}</td></tr></table>")
    .OptionLabel(Resources.Resources.LblNotDefinedList)
    .Filter("contains")
)

我想向 onCompanyChange 发送 ${Code} 的值,在对 GetCompanies 的异步请求后检索(作为 json)。

获得它后,我会将其值设置为 MVC HiddenField,然后发送回服务器。

如何通过 Kendo 更改事件传递该值?

您应该处理 "select" 事件以获取所选项目。来自 kendo documentation 的类似内容:

function onSelect(e) {
                if ("kendoConsole" in window) {
                    if (e.item) {
                        var dataItem = this.dataItem(e.item);
                        kendoConsole.log("event :: select (" + dataItem.text + " : " + dataItem.value + ")");
                    } else {
                        kendoConsole.log("event :: select");
                    }
                }
            };

但是您只能通过 "change" 事件获得一些行为。

<script type="text/javascript">
    function onCompanyChange(e) {
        // here I need to manage ${Code}
        var selectedIndex = this.select();
        if (selectedIndex != null){
           var selected = this.dataItem(selectedIndex);
           var code = selected.Code;
        }
    }
</script>