2008-12-06 33 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); 

與繁榮,它的設置。