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。(IE控件不存在)

这是可能的还是我必须使用 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);

最后使用自动完成控件(行为对象)中的内置事件设置器:

this._autoComplete.add_populating(this._onAutoCompletePopulating);

繁荣,它已经设置好了。

于 2008-12-08T16:16:58.797 回答