0

問題 スクリプト ファイルのスクリプト コントロールを使用して、Ajax Toolkit オートコンプリート コントロールのイベントをキャプチャして割り当てるにはどうすればよいですか?

説明

基本的に、スクリプト コントロールを作成してテキスト ボックスとオートコンプリート コントロールを組み合わせ、オートコンプリート用の汎用コントロールを機能させることができました。次のステップは、アイテムを検索する際に処理イメージなどを追加することでした。それは十分に簡単に思えました。

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 プロパティにテキスト プロパティがあるにもかかわらず、null になります。(つまり、コントロールは存在しません)

これは可能ですか、それとも OnXyz プロパティ サーバー側を使用してメソッドを割り当てる必要がありますか? 次のように:

  autocomplete.OnClientPoplating = someScript;
4

1 に答える 1

0

答え

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);

最後に、オートコンプリート コントロール (Behavior オブジェクト) で組み込みのイベント セッターを使用します。

this._autoComplete.add_populating(this._onAutoCompletePopulating);

そしてブーム、それは設定されています。

于 2008-12-08T16:16:58.797 に答える