Como faço para obter lado roteiro de Controle Autocomplete com um controle Script (ASP.Net)
-
19-08-2019 - |
Pergunta
Problema Como faço para capturar e atribuir os eventos de um controle autocomplete Ajax Toolkit usando um controle script no arquivo de script?
Explicação
Basicamente, eu criei um controle script para combinar uma caixa de texto e um controle autocomplete para que eu pudesse ter um controle genérico trabalhar para um preenchimento automático. O próximo passo foi adicionar coisas como uma imagem de processamento, enquanto ele procura por seus itens. Parecia bastante fácil.
protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors()
{
ScriptControlDescriptor desc = new ScriptControlDescriptor
("NDI.WebControls.Client.GenericAutoComplete", this.ClientID);
desc.AddProperty("autoCompleteID", autoComplete.ClientID);
return new ScriptDescriptor[] { desc };
}
E, em seguida, no javascript normal:
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');
},
Agora, isso deve funcionar, mas isso não acontece. Por quê? Porque aparentemente não há nenhum controle autocomplete processado para a página como um controle normal seria. Assim, quando se chega a US $ obter parte se trata-se nula, apesar da propriedade ID tendo uma propriedade de texto. (Ou seja, o controle não existe)
Isso é possível fazer ou que eu tenho que usar o lado propriedades OnXyz servidor para atribuir um método? Como em:
autocomplete.OnClientPoplating = someScript;
Solução
RESPOSTA
Booyah Encontrado lo. Acontece que o autocomplete foi construído em forma de acesso é eventos em javascript:
lado do servidor você tem que definir o BehaviorID:
autoComplete.BehaviorID = "autoCompleteBehavior";
E, em seguida, configurá-lo no método GetScriptDescriptors:
protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors()
{
ScriptControlDescriptor desc = new
ScriptControlDescriptor("NDI.WebControls.Client.GenericAutoComplete", ClientID);
desc.AddProperty("autoCompleteID", autoComplete.BehaviorID);
return new ScriptDescriptor[] { desc };
}
É claro que você tem que adicionar o lado de propriedades script para capturar esse valor, e uma vez que você faz que você tem que usar Localizar para obtê-lo. Então você tem que criar o manipulador de eventos:
this._autoComplete = $find(this._autoCompleteID);
this._onAutoCompletePopulating =
Function.createDelegate(this, this.handleOnAutoCompletePopulating);
Finalmente usar o construída em setter evento no controle autocomplete (objeto Comportamento):
this._autoComplete.add_populating(this._onAutoCompletePopulating);
E bum, ele é definido.