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;
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top