问题 如何使用脚本文件上的脚本控件在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属性具有text属性,但它仍然为null。 (IE控件不存在)
这可能或者我必须使用OnXyz属性服务器端来分配方法吗?如:
autocomplete.OnClientPoplating = someScript;
答案 0 :(得分: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);
热潮,它已经确定了。