我有一个使用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)
};
}
答案 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)
};
}