2008-12-06 45 views
0

问题 如何获取和分配使用的脚本文件的脚本控制的Ajax工具包自动完成控件的事件自动完成控制脚本的一面呢?我怎么用脚本控制(ASP.Net)

说明

我基本上创建了一个脚本控制相结合的文本框,并自动完成控制,这样我可以有一个自动完成工作的通用控制。下一步是在搜索其项目时添加处理图像等内容。这似乎很容易。

protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors() 
{ 
    ScriptControlDescriptor desc = new ScriptControlDescriptor 
    ("NDI.WebControls.Client.GenericAutoComplete", this.ClientID); 
    desc.AddProperty("autoCompleteID", autoComplete.ClientID); 

    return new ScriptDescriptor[] { desc }; 
} 

,然后在JavaScript中正常:

initialize: function() 
{ 
    this._autoComplete = $get(this._autoCompleteID); 
    //this._autoCompleteID does have a value 

    this._autoCompleteClientPopulating = 
    Function.createDelegate(this, this.handleAutoCompleteClientPopulating); 

    $addHandler(this._autoComplete, "clientPopulating", 
    this._autoCompleteClientPopulating); 

    NDI.WebControls.Client.GenericAutoComplete.callBaseMethod(this, 'initialize'); 
}, 

现在,这个应该工作,但事实并非如此。为什么?因为显然没有像正常控件那样呈现给页面的自动完成控件。所以,当它到达$ get部分时,即使ID属性具有文本属性,它也会显示为空。 (IE的控制不存在)

这是可能做或我必须使用OnXyz属性服务器端分配一个方法?如:

autocomplete.OnClientPoplating = someScript; 

回答

0

ANSWER

Booyah发现了它。原来,自动完成有一个内置的方式来访问它的事件在javascript:

服务器端,你必须设置BehaviorID:

autoComplete.BehaviorID = "autoCompleteBehavior"; 

然后将其设置在GetScriptDescriptors方法:

protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors() 
{ 
    ScriptControlDescriptor desc = new 
    ScriptControlDescriptor("NDI.WebControls.Client.GenericAutoComplete", ClientID); 
    desc.AddProperty("autoCompleteID", autoComplete.BehaviorID); 

    return new ScriptDescriptor[] { desc }; 
} 

当然,你必须添加属性脚本端来捕获该值,一旦你这样做,你必须使用Find来获取它。然后,你必须创建事件处理程序:

this._autoComplete = $find(this._autoCompleteID); 
this._onAutoCompletePopulating = 
    Function.createDelegate(this, this.handleOnAutoCompletePopulating); 

最后使用内置在自动完成控制(行为对象)事件二传手:

this._autoComplete.add_populating(this._onAutoCompletePopulating); 

与繁荣,它的设置。