Kendo阅读操作 - 获取控件ID

时间:2017-05-05 00:17:09

标签: asp.net-mvc telerik-mvc

我有一个使用Kendo DropDownListFor的局部视图,在数据源读取操作中,我传递一个函数名来获取其他参数,例如。

@(Html.Kendo().DropDownListFor(m => m.AssignedUserId)
    .OptionLabel("Assign to ...")
    .DataTextField("FullName")
    .DataValueField("UserId")
    .Filter(FilterType.StartsWith)
    .AutoBind(true)
    .DataSource(source => {
        source.Read(read => { **read.Action("GetStaffList", "ManageUser").Data("filterAssigned");** })
            .ServerFiltering(true);
    })
)

function filterAssigned(e) {
    // Selector needs to be prefixed "Create_" or "Update_" depending on view/HtmlFieldPrefix.
    var ctl = $("#AssignedUserId").data("kendoDropDownList");
    return {
        staffFilter: (ctl.filterInput.val() || 'empty'),
        selectedId: (ctl.value() || 0)
    };
}

在“FilterAssigned”函数中,我希望获得控件的Id而不是硬编码$("#AssignedUserId").data("kendoDropDownList")。这是因为在创建View时,我设置了ViewData.TemplateInfo.HtmlFieldPrefix = "Create",因此实际控件ID呈现为“Create_AssignedUserId”,我想使用相同的函数进行创建,更新等。

我尝试过常用选项:

this.id
this.attr('id')
this.element.attr('id')
e.sender

Telerik声明在读取过程中无法获得'this'属性,但我没有看到除选择器方法之外的其他解决方案。基本上我正在尝试这样做:

function filterAssigned() {
        var ctl = **this.id**;
        return {
            staffFilter: (ctl.filterInput.val() || 'empty'),
            selectedId: (ctl.value() || 0)
        };
    }

1 个答案:

答案 0 :(得分:0)

我发现解决此问题的最佳方法是使用剃刀助手@Html.IdFor。返回的控件ID包括HtmlFieldPrefix。该功能现在看起来像......

function filterAssigned() {
    var ctl = $("#@Html.IdFor(m => m.AssignedUserId)").data("kendoDropDownList");
    return {
        staffFilter: (ctl.filterInput.val() || 'empty'),
        selectedId: (ctl.value() || 0)
    };
}