我正在尝试为使用jQuery auto-complete的自动完成下拉菜单创建一个 ASP .Net (VB.Net) 自定义控件。
基本流程是控件的使用者将设置一些属性(例如数据源),然后将其作为 javascript 注入以初始化自动完成。
涉及的部分很多,所以我可能错过了发布一些代码,如果您认为缺少某些内容,请发表评论,我会添加它。
消费者背后的代码(PreInit 事件):
myDropDown.DataCallback = "testFunc";
控件中的 DataCallback 属性:
Public Property DataCallback As String
后面的控制代码中的选项对象创建和javascript注入(PreRender事件):
Dim _serializer As New JavaScriptSerializer()
Dim optionsObject As New Dictionary(Of String, Object)
optionsObject.Add("source", DataCallback)
Dim optionsJSON = _serializer.Serialize(optionsObject)
Dim initializeScript = String.Format("initialize('{0}', {1});", ClientID, optionsJSON)
Attributes.Add("onfocusin", initializeScript)
最后,javascript:
var initialize = function (controlID, options) {
if (options) {
$('#' + controlID).autocomplete(options);
}
// remove the blur event handler that called this initialize function
$('#' + controlID).removeAttr('onfocusin');
};
当我调试initialize
函数时,我看到options
有一个属性,source
,字符串"testFunc"
作为它的值。我需要的是source
's 的值testFunc
(而不是字符串),因此它可以作为自动完成中的回调执行,而不是自动完成认为它是一个 URL。