Pregunta

Problema ¿Cómo capturo y asigno los eventos en un control de autocompletado de Ajax Toolkit usando un control de script en el archivo de script?

Explicación

Básicamente, creé un control de secuencia de comandos para combinar un cuadro de texto y un control de autocompletar para poder tener un control genérico funcional para una autocompletar. El siguiente paso fue agregar cosas como una imagen de procesamiento mientras busca sus elementos. Parecía 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 };
}

Y luego en javascript lo 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');
},

Ahora esto debería funcionar PERO no funciona. ¿Por qué? Porque aparentemente no hay un control de autocompletado en la página como lo sería un control normal. Entonces, cuando llega a la parte $ get, aparece nulo a pesar de que la propiedad ID tiene una propiedad de texto. (Es decir, el control no existe)

¿Es posible hacer esto o debo usar el lado del servidor de propiedades de OnXyz para asignar un método? Como en:

  autocomplete.OnClientPoplating = someScript;
¿Fue útil?

Solución

ANSWER

Booyah lo encontró. Resulta que el autocompletado tiene una forma integrada de acceder a sus eventos en javascript:

En el lado del servidor, debe configurar BehaviorID:

autoComplete.BehaviorID = "autoCompleteBehavior";

Y luego configúrelo en el 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 };
}

Por supuesto, debe agregar el lado del script de propiedades para capturar ese valor, y una vez que lo hace, debe usar Buscar para obtenerlo. Luego debe crear el controlador de eventos:

this._autoComplete = $find(this._autoCompleteID);
this._onAutoCompletePopulating = 
   Function.createDelegate(this, this.handleOnAutoCompletePopulating);

Finalmente use el configurador de eventos incorporado en el control de autocompletar (objeto Comportamiento):

this._autoComplete.add_populating(this._onAutoCompletePopulating);

Y boom, está listo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top