Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用脚本控件(ASP.Net)获取自动完成控件脚本端_Javascript_Ajax_.net 3.5_C# 3.0_Scriptcontrol - Fatal编程技术网

Javascript 如何使用脚本控件(ASP.Net)获取自动完成控件脚本端

Javascript 如何使用脚本控件(ASP.Net)获取自动完成控件脚本端,javascript,ajax,.net-3.5,c#-3.0,scriptcontrol,Javascript,Ajax,.net 3.5,C# 3.0,Scriptcontrol,问题 如何使用脚本文件上的脚本控件捕获和分配Ajax Toolkit自动完成控件上的事件 解释 我基本上创建了一个脚本控件来组合一个文本框和一个自动完成控件,这样我就可以有一个用于自动完成的通用控件。下一步是在搜索项目时添加处理图像之类的内容。这似乎很容易 protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors() { ScriptControlDescriptor desc = new Sc

问题 如何使用脚本文件上的脚本控件捕获和分配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 };
}
现在这应该行得通,但是不行。为什么?因为显然没有像普通控件那样呈现到页面的自动完成控件。因此,当它到达$get部分时,尽管ID属性有一个text属性,它仍然返回null。(即控件不存在)

这是可能的,还是我必须使用OnXyz属性服务器端来分配方法?例如:

  autocomplete.OnClientPoplating = someScript;

回答

布耶找到了。事实证明,autocomplete有一种内置的方式来访问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 };
}
最后,在自动完成控件(行为对象)中使用内置事件设置器:

砰的一声,一切就绪

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

  return new ScriptDescriptor[] { desc };
}
this._autoComplete = $find(this._autoCompleteID);
this._onAutoCompletePopulating = 
   Function.createDelegate(this, this.handleOnAutoCompletePopulating);
this._autoComplete.add_populating(this._onAutoCompletePopulating);